ch10 : 상속
목차
상속
상속을 하게 되면 부모 클래스에 선언된
public
,protected
로 선언된 모든 변수, 메서드를 사용할 수 있다.자바 클래스는 단일 상속만 가능하다.
상속을 사용하는 이유 : 자식에서 부모의 기능을 재사용 + 확장하기 위해
상속과 생성자
자식의 생성자가 호출되면, 자동으로 부모클래스의 매개변수 없는 생성자가 실행된다.
상속 받으려면,
부모 클래스의 기본 생성자가 존재해야 한다.
만약 부모 클래스에 매개변수 있는 생성자만 있다면,
super
을 통해서 부모 클래스의 생성자를 선택해도 된다. → 이때, 매개변수는 null이 아닌 명확한 값을 넘겨주어야 한다!
super()
을 통해서 부모 클래스의 메소드에 접근할 수 있다.
오버라이딩
부모 클래스의 메서드를 자식클래스에서 재정의하는 것
이때, 접근 제어자, 리턴 타입, 메소드명, 매개변수 타입/갯수가 동일해야 한다.
주의
자식클래스에서 리턴 타입을 동일하게 오버라이딩 해야 된다.
접근 제어자는 자식에서 같거나, 더 넓은 권한이어야 한다.
ex) 부모에서
priavte
이면, 자식은public
일 수 있다. 반대는 안됨!
참조자료형의 형변환
Parent obj = new Child();
가능 → 객체를 자식으로 생성하면, 자식객체는 부모의 메소드를 사용할 수 있다.Child obj = new Parent();
컴파일 에러 → 객체를 부모로 생성하면, 자식의 메소드들을 사용할 수 없다.이 경우 명시적 형변환이 필요하다.
다만, 부모 객체를 자식클래스로 억지로 형변환 하는 경우, 컴파일 에러는 피할 수 있으나, 실제로 생성된 부모객체가 자식 클래스의 메소드를 사용하려면 예외가 발생한다.
명시적 형변환을 사용하는 이유
실제로는 자식 클래스 객체인데, 부모 클래스에 담겨있던 경우, → 다시 자식 클래스로 형변환하기 위해 사용할 수 있다.
사용하는 경우
일반적으로 여러 개의 값을 처리(배열)하거나, 매개 변수로 값을 보낼 땐 보통 부모 클래스의 타입으로 보낸다.
그렇지 않으면, 여러 값을 한번에 보낼 때 각 타입별로 구분해서 메소드를 만들어야 하기 때문이다.
이때 실제 타입이 부모 클래스인지 자식클래스인지 구분하기 위해
instanceof
로 구분한다.instanceof
로 타입 점검할 경우, 하위에 있는 자식부터 확인해야 한다.객체 instanceof 클래스(타입)
ex)
if (parentArr[0] instanceof Parent)
로 실제 클래스를 확인한다.
다형성
Last updated