본문 바로가기

JAVA/DAY 15 _ 23.09.06

Polymorphism

package p7;

public class Main_polymorphism {

	public static void main(String[] args) {

		
    // 다형성 : 참조변수는 본인의 타입을 포함해서 모든 자손을 받을 수 있다.

    // 1. 일반적인 경우

    AAA a = new AAA();
    a.printA();

    BBB v1 = new BBB();
    BBB v2 = null;		// 참조 주소에 null을 넣을 수 있으니까는~

    // BBB b2 = new AAA();		--> 이건 당연히 안되겠지. type mismatch

    double d = 1;		// 이것도 type mismatch인데, 자동으로 type casting이된거임.



    // 2. 다형성의 경우

    AAA aaa;
    aaa = new AAA();			// 당연히 되는것

    aaa = new BBB();			// ★★★★ 이게 다형성 (type mismatch여도 알아서 casting된거.)

    BBB bbb;
    // bbb = new AAA();			
    // --> 이건 또 안돼. (엄마는 아들을 호출할 수 있지만, 아들은 엄마를 호출할 수 없군!)



    // 3. 주의사항
    AAA a1 = new AAA();

    AAA a2 = new BBB();			
    // a2 변수는 AAA 클래스의 참조 변수이지만, 실제로는 BBB 클래스의 객체를 가리키고 있음 ★★★
    // a2.b1 = 10; ---> 1) 문법적으로는 선언할 수 없는 코드.
    // 2) 실제 런타임에서는 구현이 가능함. 이 코드를 왜쓰는거야?
    // --> 아직까지는 의미없는 코드. (오버 라이딩을 배워보자!)


    BBB b1 = new BBB();

    b1.printA();
    b1.printB();
    System.out.println(b1.a1);		// 5

    // b1. ---> AAA의 인스턴스까지 다 쓸 수 있음
    // a2. ---> BBB의 인스턴스를 못쓴다

	}
}
class AAA{
	
	int a1 = 5;
	int a2;
	
	void printA() {
		
		System.out.println("프린트 A 매소드");
	}
}


class BBB extends AAA{
	
	int b1;
	int b2;
	
	void printB() {
		
		System.out.println("프린트 B 매소드");
	}
}

'JAVA > DAY 15 _ 23.09.06' 카테고리의 다른 글

Object class  (0) 2023.09.12
TypeCasting  (0) 2023.09.12
Basic  (0) 2023.09.12
Final  (0) 2023.09.12
Super  (0) 2023.09.12