- 객체 생성 방법중 틀리것은?
class Person{}
class Student extends Person{}[1] Student s1 = new Student();
[2] Person s2 = new Student();
[3] Person p1 = new Person();
[4] Student s1 = new Person();
사전적 의미 : 다양한 형태 또는 특성을 가진다는 의미.
객체 지향 언어에서 의미 : 부모 클래스를 상속 받은 자식 클래스의 인스턴스가 부모 객체로도 사용되고, 뿐만 아니라 자식 클래스의 객체로도 사용될 수 있는 다양한 상황을 의미한다.
Person s1 = new Student(); 이렇게 부모타입으로 객체 생성이 가능 하다는 이야기!
예시
부모 클래스 Bird가 있고, 이를 상속받은 자식 클래스 Parrot이 있다고 가정하자.
이때, 사람들이 "Parrot이 말을 하네" 할 수도 있지만, 누군가는 "새가 말을 하네..허허" 이렇게 말 할 수도 있다.
자식 클래스를 통해서 객체를 생성하고 있지만 타입을 부모 클래스로 지정 할 수 있다.
결론
하위 클래스의 인스턴스(객체)는 보다 위인 상위 클래스의 인스턴스(객체)로도 사용될 수 있다.
반대의 경우는 안된다. 상위(부모)클래스의 인스턴스(객체)는 하위(자식) 클래스의 인스턴스(객체)로 사용될 수 없다.
다형성의 관계에서 부모,자식 클래스 자원을 어떻게 쓸 수 있을가?😎
[1] Student_1 s1 = new Student_1(); --> 부모 + 자식 클래스의 모든 자원을 다 쓸 수 있다.
[2] Person_1 s2 = new Student_1(); --> 범위는 부모의 자원만을 쓸 수 있다.(?)
[3] Person_1 p1 = new Person_1(); --> 부모클래스의 자원만 쓸 수 있다
[4] Student_1 bb =new Person(); --> 에러(Err)
클래스 자원
[1]에서 자원 사용
<출력물>
난 부모 클래스
난 자식 클래스
오버라이딩 - AAA
sss
ppp
<출력물>
난 부모 클래스
오버라이딩 - AAA
ppp
<출력물>
에이에이에이
ppp
<s1.x(); 출력물>
오버라이딩 - AAA
에이에이에이
[2]경우는 부모자원만 사용 할 수 있었다. 하지만 자식 메서드를 호출 하고 싶을 때 캐스트를 사용!
s2. sss() ; -- 자식 메서드 바로 사용 X
((Student) s2).sss(); -- 캐스트 사용하면 가능 O