[Java] 10. 상속과 구체화 (2)

2023. 10. 7. 02:23Java언어 공부

상속과 객체 참조변수

 

보통 상속 관계에서는 상위 타입을 이용하여 객체를 처리한다.

가끔 상위 타입 변수에 유지한 객체를 원래 타입으로 변환해야 할 필요가 있다.

 

타입 변환 과정에서 오류가 발생할 수 있다.

instanceof 연산자를 사용하여 해결할 수 있다.

 

x instanceof X : x가 실제 가리키는 타입을 X 타입 변수에 유지할 수 있으면 true가 된다.

( x가 Null이면 false이며 X가 Object면 항상 true이다 )

 

자바 16 이후부터는, X 뒤에 이름을 붙여 바로 초기화를 할 수 있게 했다.

 

if (obj instance of String s && s.length() > 5)
{
	s.contains(..)
}

 

메소드 바인딩

 

호출문과 호출 함수를 묶는 것이다.

 

이른 바인딩 (Early Binding) : 컴파일에 연결하는 것

늦은 바인딩 (Late Binding) : 실행시간에 연결하는 것

 

final로 수식하면 이른 바인딩을 해줄 수 있음

그 이외에 abstract로 정의하거나 abstract를 상속하면 늦은 바인딩이다.

 

상속의 구현

메소드

- 부모 클래스의 메소드를 상속 받음

- 부모 클래스의 메소드를 재정의함

- 부모 클래스에 없는 새 메소드를 정의한다.

 

private는 상속되지 않는다.

 

부모에 정의된 메소드를 호출해야 할 때 키워드 super을 사용한다.

super.super과 같이 조상격 메소드를 호출할 수 없다.

 

재정의 규칙

 

1. 매개 변수 타입은 정확하게 일치해야 한다.

2. 반환 타입은 더 특수한 타입을 사용할 수 있다.

3. 메소드의 접근 권한은 완화할 수 있어도 강화할 수는 없다.

4. 공표하는 checked 예외 집합은 부모가 공표하는 checked 예외의 부분 집합이어야 한다.

 

멤버 변수

 

1. 부모 클래스의 멤버 변수를 상속 받는다.

2. 새 멤버 변수를 정의한다.

 

상속을 이용하면서 똑같은 이름의 변수를 생성할 수 있지만, 그렇게 하는 것은 바람직하지 않다.