Skip to Content
Suffering builds character

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 } }

어떻게? poly

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

poly2

반대로 참조하는 상황?

Main.java
Whale w = new Animal();

불가능
→ 참조 변수의 타입인 Whale이 가진 멤버의 개수(name, sing(), swim())가 참조하고 있는 인스턴스인 Animal 클래스의 인스턴스의 멤버의 개수보다 더 많기 때문

poly3

Whale 타입의 참조 변수 whaleAnimal 타입의 클래스의 인스턴스를 참조하고 있는데,

whale로 자신의 멤버인 swim()을 참조하려고 하면 존재하지 않는 메서드에 접근하려 하면서 문제가 발생하기 때문

Last updated on