다형성
- 객체가 다양한 형태로 표현될 수 있다는 개념 → 부모 클래스를 활용하여 자식의 객체를 제어할 수 있다
상속과 다형성
- 다형성은 상속 관계에 있는 클래스간에만 사용 가능
- 클래스에서 다형성을 사용할 때 부모 클래스의 객체를 사용하되, 실제 메모리에 담기는 내용은 자식 클래스의 내용을 담음
public class Main {
public static void main(String[] args) {
//Animal animal = new Animal("동물"); 불가능합니다.
Lion lion = new Lion("사자");
lion.Growl();
Cat cat = new Cat("고양이");
cat.Growl();
}
}
abstract class Animal {
String Name;
public Animal(String name) {
Name = name;
}
abstract public void Growl();
}
class Lion extends Animal {
public Lion(String name) {
super(name);
}
public void Growl() {
System.out.println("어흥");
}
}
class Cat extends Animal {
public Cat(String name) {
super(name);
}
public void Growl() {
System.out.println("야옹");
}
}
- 위 코드는 앞서 상속 파트에서 다룬 코드
public class Main {
public static void main(String[] args) {
Animal animal_lion = new Lion("사자");
animal_lion.Growl();
Animal animal_cat = new Cat("고양이");
animal_cat.Growl();
//animal_cat.Udada(); 불가능합니다.
}
}
abstract class Animal {
String Name;
public Animal(String name) {
Name = name;
}
abstract public void Growl();
}
class Lion extends Animal {
public Lion(String name) {
super(name);
}
public void Growl() {
System.out.println("어흥");
}
}
class Cat extends Animal {
public Cat(String name) {
super(name);
}
public void Growl() {
System.out.println("야옹");
}
public void Udada() {
System.out.println("UDADADA");
}
}
- 4번째, 7번째 줄: 다형성을 사용하고 있음. animal_lion과 animal_cat의 자료형은 Animal 클래스지만 4번째 줄에서 객체를 초기화할 때 Lion 클래스를, 7번째 줄에서는 Cat 클래스를 사용
- 객체 껍데기는 Animal 클래스를 사용했지만 실제 객체에 저장되는 데이터는 Animal로부터 상속받은 Lion과 Cat 클래스 데이터
- 9번째 줄 주석: 데이터는 각각의 자식 클래스에 저장되지만 틀은 Animal 클래스기 때문에 animal_cat.Udada() 사용 불가능 → Animal 클래스에는 존재하지 않는 메소드
바로 실행해보면서 배우는 java'를 학습하며 정리한 문서
'기타 > Java' 카테고리의 다른 글
Java 문법(11)끝 - 예외처리 (try-catch, Exception) (0) | 2022.02.08 |
---|---|
Java 문법(9) - 상속, 추상화 (0) | 2022.02.08 |
Java 문법(8) - 이차원배열, 클래스배열 (0) | 2022.02.08 |
Java 문법(7) - 데이터 입출력 (0) | 2022.02.07 |
Java 문법(6) - 클래스와 객체, 접근제한자 (0) | 2022.02.07 |