본문 바로가기

Java/Chapter 15. 클래스 상속 2 : 오버라이딩

(3)
[Java] 15.03 - instanceof 연산자 들어가며 끝으로 유용하게 사용할 수 있는 상속과 관련된 연산자 하나를 소개하고자 한다. 이 연산자의 피연산자는 참조변수와 클래스의 이름이다. instanceof 연산자의 기본 연산자 instanceof는 참조변수가 참조하는 인스턴스의 '클래스'나 참조하는 인스턴스가 '상속하는 클래스'를 묻는 연산자이다. 예를 들면 다음과 같이 문장을 구성할 수 있다. if (ca instanceof Cake) .... 위에서 ca는 참조변수이고 Cake는 클래스 이름이다. 그리고 ca가 참조하는 인스턴스가 Cake의 인스턴스이거나 Cake를 상속하는 클래스의 인스턴스이면 true를, 그렇지 않다면 false를 반환한다. 관련하여 다음 예제를 보자. class Cake {} class CheeseCake extends C..
[Java] 15.02 - 메소드 오버라이딩 들어가며 메소드 오버라이딩은 상위 클래스에 정의된 메소드를 하위 클래스에서 다시 정의하는 것을 뜻한다. 이렇듯 메소드 오버라이딩이 문법적으로는 단순하지만 이것이 가져다주는 이점은 결코 가볍지 않다. 상위 클래스의 참조변수가 참조할 수 있는 대상의 범위 앞서 다음과 같이 SmartPhone 클래스가 MobilePhone 클래스를 상속하는 형태로 클래스를 디자인한 바 있다. class SmartPhone extends MobilePhone {....} 따라서 다음과 같이 문장을 구성할 수 있다. SmartPhone phone = new SmartPhone("010-3333-6666", "Nougat"); 그런데 다음과 같이 MobilePhone형 참조변수가 SmartPhone 인스턴스를 참조할 수도 있다. ..
[Java] 15.01 - 상속을 위한 두 클래스의 관계 들어가며 두 클래스를 상속의 관계로 맺는 것이 도움이 되는 상황이 있고 도움이 되지 않는 상황이 있다. 그렇다면 언제 두 클래스를 상속의 관계로 맺어야 하는가? 기본적으로 'IS-A 관계'라는 것이 성립해야 상속의 후보로 고려할 수 있다. 상속의 기본 조건인 'IS-A 관계' 상속이 갖는 문법적 특성을 통해서 상위 클래스와 하위 클래스를 다음과 같이 이야기 할 수 있다. "하위 클래스는 상위 클래스의 모든 특성을 지닌다." "거기에 더하여 하위클래스는 자신만의 추가적인 특성을 더하게 된다." 이러한 '상속'의 특성을 현실 세계에서도 찾아볼 수 있다. 대표적인 예가 다음과 같다. 아래에서 모바일폰은 통화의 기능만 담겨있는 feature phone을 의미한다. 모바일폰 vs 스마트폰 '모바일폰'이 상위 클래..