반응형
다형성(polymorphism) : 여러 가지 형태를 가질 수 있는 능력
- 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
- 같은 코드에서 여러 다른 실행 결과가 나옴
- 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
- 다형성을 잘 활용하면 유연하고, 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있음
이전까지 인스턴스 타입과 일치하는 타입의 참조변수만을 사용해왔지만
만약 두 클래스가 상속관계라면 다형성을 적용할 수 있다. 즉, 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것도 가능하다.
package ch06;
public class Animal {
public void makeSound() {
System.out.println("동물이 소리를 내고 있습니다.");
}
}
package ch06;
public class Brid extends Animal{
@Override
public void makeSound() {
System.out.println("새가 지저귀고 있습니다.");
}
public void fly() {
System.out.println("새가 날아갑니다.");
}
}
Bird b = new Brid ( ) ; // 참조 변수와 인스턴스의 타입이 일치
Animal a = new Brid ( ); // 조상 타입(Animal) 참조 변수로 자손타입(Bird) 인스턴스 참조
Animal 타입의 참조변수로는 Bird 인스턴스 중에서 Animal 클래스의 멤버들(상속받은 멤버포함)만 사용할 수 있다.
따라서 생성된 Bird 인스턴스 멤버 중에서 Animal 클래스에 정의되지 않은 멤버 fly( )은 참조변수 a로 사용이 불가능하다.
즉, a.fly( )와 같이 할 수 없다는 것이다.
둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수 있을까?
정답은 불가능하다 이다.
실제 인스턴스인 Animal의 멤버 개수보다 참조변수 b가 사용할 수 있는 멤버 개수가 더 많기 때문이다.
- 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 없다!
- 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다
반응형
'Java > Java 이론' 카테고리의 다른 글
[JAVA] String 클래스 (0) | 2023.08.10 |
---|---|
[JAVA] 추상 클래스와 메서드 (0) | 2023.08.10 |
[JAVA] 객체지향 언어 (0) | 2023.08.09 |
[JAVA] switch 문 (0) | 2023.08.09 |
[JAVA] 상속 (2) (0) | 2023.08.08 |