package polymorphism;
//다형성 ploymorphism
/*
* 다형성은 동적 바인딩이 지원되는 프로그램 언어에서 사용할 수 있습니다.
*
* 런타임대 최종 타입이 결정됩니다.
*
* 하나의 객체가 여러가지 형태를 가질 수 있는 것
*
* 자바의 다형성은 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 하는것.
* 상위 클래스 타입의 참조변수를 통해 하위 클래스의 객체를 참조할 수 있도록
* 허용하여 상위 클래스가 동일한 메세지로 하위 클래스들이 서로 다른 동작을 할 수 있게 하는 것.
*
* 다형성을 활용하면 부모클래스가 자식 클래스의 동작 방식을 알 수 없어도
* 오버라이딩을 통해 자식 클래스에 접근할 수 있다.
*
* 장점
* 유지보수 : 여러 객체를 하나의 타입으로 관리할 수 있다.
* 재사용성 : 객체의 재사용이 쉽다.
* 느슨한 결합 : 클래스간의 의존성을 줄여 확장성은 높아지고 결합도는 낮아진다.
*
* 다형성의 조건
* 상위 클래스와 하위 클래스는 상속관계여야 한다.
* 다형성이 보장되기 위해서 오버라이딩이 반드시 필요하다.
* 자식 클래스의 객체가 부모 클래스의 타입으로 형변환 해야 한다.
*
* */
class Hero {
String namel;
void attack() {
System.out.println("공격");
}
}
class Ironman extends Hero {
public void makeSuit() {
System.out.println("javis, 슈트 만들어.");
}
}
class Hulk extends Hero {
@Override
void attack() {
System.out.println("주먹!");
}
}
class Superman extends Hero {
@Override
void attack() {
System.out.println("날아라!");
}
}
class Captain extends Hero {
@Override
void attack() {
System.out.println("방패!");
}
}
public class PolyMorphism {
public static void main(String[] args) {
Ironman iron = new Ironman();
Hero h = new Ironman();// 반드시 부모 클래스가 앞에 나와야 합니다.
iron.makeSuit();
// h.makeSuit();// 저런 메소드가 없기 때문에
Ironman mark2 = (Ironman) h;
mark2.makeSuit();
((Ironman) h).makeSuit();
Hulk hulk = new Hulk();
hulk.attack();
// ((Ironman))((Hero)hulk).makeSuit();
Hero avangers[] = new Hero[5];
avangers[0] = new Ironman();
avangers[1] = new Hulk();
avangers[2] = new Superman();
avangers[3] = new Captain();
avangers[4] = new Captain();
for (Hero hero : avangers) {
hero.attack();
}
// List<Integer> list = new ArrayList<Integer()>;
Hero hero = new Hero();// 이런일을 방지하고자 추상화가 나옵니다.
}
}
javis, 슈트 만들어.
javis, 슈트 만들어.
javis, 슈트 만들어.
주먹!
공격
주먹!
날아라!
방패!
방패!
'2023.11.21-2024.05.31' 카테고리의 다른 글
231219 JAVA AbstractEx2(추상화) (0) | 2023.12.20 |
---|---|
231219 JAVA AbstractEx(추상화) (0) | 2023.12.20 |
231219 JAVA Override(오버라이드) (0) | 2023.12.20 |
231219 JAVA Overload(오버로드) (0) | 2023.12.20 |
231219 JAVA Inheritance(상속 + 접근제어자 protected) (0) | 2023.12.20 |