Java/Java

[이것이자바다]7. 상속

지금이니! 2020. 4. 20. 11:30

부모 생성자 호출

자식 객체를 생성하면, 부모 객체가 먼저 생성되고 자식 객체가 그 다음에 생성된다.

 - 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.(super())

 

메소드 오버라이딩(@Override)

 - 부모의 메소드와 동일한 시그니처

 - 접근 제한을 더 강하게 할 수 없다.

 - 새로운 Exception throws 불가

 

super: 부모 객체를 참조하는 키워드

 - super.부모메소드();

 

final 클래스, 메소드

 - 클래스의 경우 상속할 수 없는 클래스가 된다.(ex. String 클래스)

 - 메소드의 경우 오버라이딩할 수 없다.

 

타입 변환과 다형성

 - 다형성: 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질

    > 부모 클래스로 타입 변환을 허용. 즉 부모 타입에 모든 자식 객체가 대입될 수 있다.

 - 자동타입변환(Promotion)

    > 부모클래스 변수 = 자식클래스타입;

 - 부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능하다. 그러나 메소드가 자식 클래스에서 오버라이딩되었다면 자식 클래스의 메소드가 대신 호출된다.

 - 강제타입변환(Casting)

    > 자식클래스 변수 = (자식클래스) 부모클래스타입;

    > 모든 부모 타입을 자식 클래스 타입으로 강제 변환할 있는 것이 아니고, 자식 타입이 부모 타입으로 자동 변환한 후, 다시 자식 타입으로 변환할 때만 강제 타입 변환을 사용할 수 있다.

    > 자식 타입에 선언된 필드와 메소드를 사용해야되는 경우 Casting을 한다.

 - 객체타입확인(instanceof): 부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확인하는 연산자

    > parent instanceof Child

 

추상 클래스(abstract class)

 - 실체 클래스의 공통되는 필드와 메소드를 추출해서 만드는 클래스로 객체를 직접 생성해서 사용할 수 없다.

 - 일반 클래스와 마찬가지로 필드, 생성자, 메소드 선언할 수 있다.

 - new 연선자로 직접 생성자 호출은 할 수 없지만 자식 객체가 생성될 때 super(...)를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자가 반드시 있어야 한다.

 

추상 메소드와 오버라이딩

 - 추상 메소드는 추상 클래스에서만 선언할 수 있다. 메소드의 선언부만 있고 실행 내용인 중괄호 {}가 없는 메소드

 - 하위 클래스가 반드시 실행 내용을 채우도록 해야하는 경우 추상 메소드를 선언한다.