728x90
반응형
상속이란?
기존 클래스를 재사용하여 새로운 클래스를 작성하는 문법 요소
멤버(필드, 메서드, 이너클래스)를 하위 클래스에게 건네준다.
보통 상위클래스와 하위클래스가 상속 관계에 있다고 표현하며, 하위 클래스는 항상 상위클래스보다 멤버갯수가 같거나 더 많다. = 클래스로부터 확장되었다 라는 표현이 정확한 표현이다.
상속을 사용하는 이유
코드를 재사용하면 적은 양의 코드로 새로운 클래스를 작성할 수 있고 중복도 제거할 수 있다.
따라서 상속을 하게되면 다형적 표현이 가능해진다.
다형적 표현이란!?
하나의 객체가 여러 모양으로 표현되는 것
객체의 다형성은 객체지향형 프로그래밍에서 가장 핵심적인 개념이며, 상속의 장점 중에 하나가 다형성의 표현이다. (중요)
상속의 조건
- 단일 상속만 사용할 수 있다.
- 다중 상속이 허용되지 않는다.
메서드 오버라이딩
- 메서드의 선언부(메서드 이름, 매개변수, 반환타입)가 모두 상위클래스와 완전히 일치해야 한다.
- 접근 제어자의 범위가 상위클래스의 메서드보다 같거나 넓어야 한다. (잘 모르겠음)
- 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다. (잘 모르겠음)
public class Main {
public static void main(String[] args) {
Game1 game1 = new Game1();
Game2 game2 = new Game2();
Game3 game3 = new Game3();
Game game = new Game();
game1.run();
game2.run();
game3.run();
Game game11 = new Game1();
Game game22 = new Game2();
Game game33 = new Game3();
game11.run();
game22.run();
game33.run();
}
}
class Game {
void run() {
System.out.println("Game 시작!");
}
}
class Game1 extends Game {
void run() {
System.out.println("game1 실행중");
}
}
class Game2 extends Game {
void run() {
System.out.println("game2 실행중");
}
}
class Game3 extends Game {
void run() {
System.out.println("game3 실행중");
}
}
//Output
game1 실행중
game2 실행중
game3 실행중
Game 시작!
game1 실행중
game2 실행중
game3 실행중
위 코드는 Overwrite 오버라이드 예시이다.
그리고 객체를 생성할 때 참조변수에 상위클래스를 사용할 수 도 있는데, 이때에는 상위클래스에 있는 것만 사용할 수있다. 또는 오버라이드 된 것도 사용가능하다.
Game[] game = new Game[] { new Game1(), new Game2(), new Game3()};
for (Game game : Game) {
game.run();
}
//Output
game1 실행중
game2 실행중
game3 실행중
상위 클래스 타입으로 객체를 생성해서 배열로 관리할 수 있다.
Object 클래스 ( 최상위 Class )
최상위 클래스 Object 클래스는 기본 defalut 값이라고 보아도 무관하다.
왜냐하면 아무런 상속도 받고있지 않는 클래스는 extends object 가 추가되어 상속받고 있는 상태가 되기 때문이다.
메서드 명 | 반환 타입 | 주요 내용 |
toString() | String | 객체 정보를 문자열로 출력 |
equals(Object obj) | boolean | 등가 비교 연산(==)과 동일하게 스택 메모리값을 비교 |
hashCode() | int | 객체의 위치정보 관련. Hashtable 또는 HashMap에서 동일 객체여부 판단 |
wait() | void | 현재 쓰레드 일시정지 |
notify() | void | 일시정지 중인 쓰레드 재동작 |
이 밖에도 더 많은 메서드를 참조하고 있지만, 대표적인 Object 클래스의 메서드들이다.
728x90
반응형
'IT 정보 > Java' 카테고리의 다른 글
[Java] 객체지향 프로그래밍 (2) - 캡슐화편 (1) | 2022.05.12 |
---|---|
[Java] super 와 super()의 차이 (8) | 2022.05.12 |
[Java] this 와 this()의 차이 (11) | 2022.05.10 |
[Java] 생성자(Constructor) 란? (6) | 2022.05.10 |
[Java] 메서드 (Method) 란!? (8) | 2022.05.10 |