키보드워리어

[자바] - 다중 상속과 참조 변수에 얽힌 퀴즈 본문

JAVA/입문

[자바] - 다중 상속과 참조 변수에 얽힌 퀴즈

꽉 쥔 주먹속에 안경닦이 2023. 3. 10. 10:23
728x90

안녕하세요 【키보드 워리어】

 

⌨🗡🧑


블로그 방문자 여러분, 안경닦이입니다.

 

오늘은 자바 객체시간입니다.

다중 상속과 참조 변수에 대해 알아보겠습니다.

 


 

Class Dog extends Animal,Pet{
}

자바에서 위와 같은 코드가 성립할까요?

 

위와 같은 다중상속은 자바에서 지원되지 않습니다.

 

 

 

Class Dog extends Pet{}

위 코드 의 경우 Dog is Pet의 관계가 됩니다.

 

하지만 Pet is Dog는 불가합니다.

 

자바에선 

다중상속이 불가합니다. C언어에선 된다고 하네요. 이게 C언어를 어렵게 느끼는 이유 중 하나예요.

 

그래서

Dog dog = new Pet();

위와 같은 코드가 불가한 거죠.

 

Dog 클래스가 Pet 클래스를 상속받았다 하더라도,
Dog은 Pet의 하위 클래스이므로 Dog 객체는 Pet의 객체가 될 수 있지만, Pet 객체는 Dog의 객체가 될 수 없습니다.

 

Pet pet = new Dog();

위와 같은 코드는 가능합니다.

 

Dog is Pet이기도 하잖아요?

 

또 다른 방법들도 있어요.

Pet pet = new Dog(); //  Pet 타입 변수에 Dog 객체를 대입
Dog dog = (Dog) myPet;  // Pet 객체를 Dog 타입으로 형변환하여 대입

Pet pet = new Dog()의 경우 잘 생각해 보시면, Dog는 Pet 클래스를 상속하고 있으므로 Dog는 Pet의 모든 속성과 메서드를 상속받게 됩니다. 이때, pet 변수는 Dog 객체를 참조하고 있지만, pet 변수는 Pet 타입이므로 Pet 타입의 속성과 메서드에만 접근이 가능합니다. 따라서, Dog is-a Pet의 관계가 성립하게 됩니다.

Dog 클래스가 Pet 클래스를 상속하면, Dog는 Pet의 하위 클래스가 되며, Pet은 Dog의 상위 클래스가 됩니다. 따라서, Dog is-a Pet이 성립하며, Pet은 Dog is-a Pet의 성립 여부와는 무관합니다.

 

728x90