자바의 신 10장 - 자바는 상속이라는 것이 있어요
-
상속
- 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것
- extends 예약어 다음에 클래스 이름을 지정하면 그 클래스를 상속받는다
- 부모 클래스의 public 및 protected로 선언되어 있는 모든 변수와 메소드를 내가 갖고 있는 것처럼 사용할 수 있다.
- 자식클래스가 생성자를 호출하면, 부모 클래스의 기본생성자가 먼저 호출되고 자식클래스의 생성자 내용들이 수행된다.
- 단일상속만 가능
-
super 예약어
- 부모 클래스의 생성자를 명시적으로 호출한다. 자식 클래스의 생성자에 가장 첫 줄에 선언 되어야 한다.
ex)
super.부모클래스메소드
super() : 부모 클래스의 기본 생성자 호출
super("ex") : 부모 클래스의 생성자 중 String 타입을 매개 변수로 받을 수 있는 생성자 호출 -> 부모 클래스에 매개 변수 있는 생성자만 있을 경우 꼭 이렇게 호출해야 한다.
-
메소드 overriding
- 자식 클래스에 부모 클래스와 동일한 메소드가 있을 때 자식 클래스의 메소드만 실행
- 접근 제어자, 리턴 타입, 메소드 이름, 매개 변수 타입 및 개수가 모두 동일해야한다. (=동일한 시그니처)
- overriding된 메소드는 부모 클래스 메소드와 동일한 리턴 타입을 가져야한다.
- 자식클래스에서 접근 제어자가 축소되면 컴파일 에러 발생 (public>protected>package-private>private) 확장만 허용
-
명시적 형 변환(casting)
- 자식 클래스 타입에서 부모 클래스 타입으로 형 변환 문제 X
부모 클래스 타입에서 자식 클래스 타입으로 형 변환 문제 O
-> 부모 클래스는 자식 클래스에 선언되어 있는 메소드나 변수를 완전히 사용할 수 없기 때문
- 형 변환 사용 이유 : 여러 값을 처리하거나, 매개 변수로 값을 전달할 때에는 보통 부모 클래스의 타입으로 보낸다. 이렇게 하지 않으면 배열과 같이 여러 값을 한번에 보낼 때 각 타입별로 구분해서 메소드를 만들어야 하는 문제가 생길 수 있다.
-
instanceof 예약어
- 구조 : 객체 instanceof 클래스(타입)
- 타입을 구분해 true/false 를 반환한다
- 부모 타입도 true를 반환하기 떄문에 가장 하위에 있는 자식 타입부터 확인해야 제대로 타입 점검이 가능하다.
-
polymorphism (다형성)
- 형 변환을 하더라도, 실제 호출되는 것은 원래 객체에 있는 메소드가 호출된다