9. 다형성
1. 다형성(Polymorphisms)
다형성이란 말 그대로, 다양한 형태를 가질 수 있는 속성, 능력을 말함 (多形性)
한 타입의 참조 변수로 여러 타입의 객체(인스턴스)를 참조할 수 있도록 구현함
상위 클래스 타입(Animal)의 참조 변수로 하위 클래스의 인스턴스를 참조할 수 있음
Main.java
Animal animal; // Animal 타입의 참조 변수Main.java
Animal animal = new Mouse();
Animal animal2 = new Dog();
Animal animal3 = new Cat();
// ...
Animal animal4 = new Shark();Animal.java
public class Animal {
void sing() {
System.out.println("동물이 목소리를 낸다");
}
}Whale 클래스
Whale.java
public class Whale extends Animal{
void swim() {
System.out.println("고래가 헤엄을 침");
}
}Main.java
public class Main {
public static void main(String[] args) {
Animal animal = new Whale();
Whale whale = new Whale();
animal.sing(); // OK
whale.sing(); // OK
animal.swim(); // Error
// Animal타입(상위 클래스)의 참조변수로는 하위 클래스의 멤버 사용 불가
whale.swim(); // OK
}
}어떻게?

→ 참조 변수가 가진 타입에 따라 참조할 수 있는 멤버의 개수가 달라짐 참조변수가 사용할 수 있는 멤버의 개수는 참조하고 있는 인스턴스 멤버의 개수보다 같거나 작음

반대로 참조하는 상황?
Main.java
Whale w = new Animal();불가능
→ 참조 변수의 타입인 Whale이 가진 멤버의 개수(name, sing(), swim())가 참조하고 있는 인스턴스인 Animal 클래스의 인스턴스의 멤버의 개수보다 더 많기 때문

Whale 타입의 참조 변수 whale로 Animal 타입의 클래스의 인스턴스를 참조하고 있는데,
whale로 자신의 멤버인 swim()을 참조하려고 하면 존재하지 않는 메서드에 접근하려 하면서 문제가 발생하기 때문
Last updated on