태그
#JAVA
JAVA - polymorphism
2021년 6월 15일 00:27

다형성
- 다양한 형태나 성질
- 하나의 부모로부터 상속받은 클래스들은 모두 형태나 성질이 다르기 때문에 하나의 객체를 여러 개의 클래스로 표현하는 것
- 클래스를 기능별로 구분하여 긴으에 대한 통합적인 처리를 위해서 사용한다
- 다중 상속을 통하여 여러 개의 클래스들으르 상속받아 기능별로 통합적으로 처리한다
타입 불일치형 = 업캐스팅 = 다형성
업캐스팅 (up casting)
- 부모 참조형 변수에 자식 인스턴스 공간의 정보를 담는 것 (자식 -> 부모로 캐스팅)
- 부모 클래스의 메소드르르 사용할 수 있다
- 부모 클래스에 있는 메소드를 오버라이드 한 메소드를 사용할 수 있다
- 자식 클래스에만 있는 메소드는 부모 클래스가 사용할 수 없다
다운 캐스팅 (down casting) : 부모 -> 자식으로 캐스팅
ex)
class Maind
public class Main {
public static void main(String[] args) {
Dog d = new Dog("사모예드");
d.disp(); // 이름 : 사모예드
d.bark(); // 멍 멍 멍멍 ㅁ어멍
d.eat(); // 뼈다귀
Animal a = new Dog("사모예드");
a.disp(); //부모의 고유한 메소드 0
a.bark(); //자식에서 오버라이드된 메소드 0
// a.eat(); // eat X
// 다운 캐스팅
if (animal2 instanceof Dog) {
Dog dog = (Dog) animal2;
dog.cry();
dog.eat();
dog.lash();
} else if(animal2 instanceof Cat) {
Cat cat = (Cat) animal;
cat.cry();
cat.eat();
cat.grooming();
}
}
}
class Dog
public class Dog extends Animal{
@Override
public void cry() {
System.out.println("멍 멍 멍멍 ㅁ어멍");
}
public void lash() {
System.out.println("꼬리 흔드릏늗ㄹ");
}
public void eat() {
System.out.println("뼈다귀");
}
}
class Cat
public class Cat extends Animal{
@Override
public void cry() {
System.out.println("미야아아아오오옹");
}
public void grooming() {
System.out.println("그릉 그ㅡㄹㅇ그르응");
}
public void eat() {
System.out.println("생선");
}
}
class Animal
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void disp() {
System.out.println("이름 : "+name);
}
public void bark() {
System.out.println("??????????????");
}
}