[Java] 다형성 메카니즘

eunhye_·2022년 8월 3일
0

Java

목록 보기
6/10
post-thumbnail

상속 관계에서만 성립되는 다형성 메카니즘에 대해 알아보자.

자바의 상속에 대해선
https://velog.io/@eunhye_/Java-java%EC%9D%98-%EC%83%81%EC%86%8D%EA%B3%BC-supersuper

💡다형성이란..?

다형성(polymorphism) : 상속 관계에 있는 클래스에서 상위 클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체 지향 원리이다.
다형성을 활용하면 부모 클래스가 자식 클래스의 동작 방식을 알수 없어도 오버라이딩을 통해 자식 클래스를 접근할 수 있다.
-> 코드의 재사용성을 향상시킨다.

성립조건

1. 부모-자식 간 클래스 상속이 이루어져야 한다.

2. 다형성이 보장되기 위해서는 하위 클래스의 메소드가 반드시 재정의되어 있어야 한다. 

3.부모 타입으로 자식클래스를 업캐스팅하여 객체를 생성해야 한다. 


class Parent1{
	int no1 = 10; //부모 클래스 변수
	
	Parent3(){
	}
}
public class Child1 extends Parent1 {  
	int no2 = 100; //자식 클래스 변수, 부모 클래스 access 불가
	
	public Child1() {
	}
    public static void main(String[] args) {
    //조건3.부모 타입으로 자식클래스를 업캐스팅하여 객체를 생성
		Parent1 c2 = new Child1(); //다형성 적용된 객체 생성
		System.out.println(c2.no1); // 10 -> 부모 클래스 변수는 access 가능
		c2.no1 = 1000; //부모 클래스 변수는 access 가능
		System.out.println(c2.no1); // 1000
		c2.no2 = 2000;  //에러!!!
        //부모타입 변수로는 자식클래스 변수 access 절대 불가

--해결--
기존 부모 클래스 타입의 변수를 (자식클래스)를 통해 타입 변경 후
공유하는 변수를 통해 자식 클래스와 부모 클래스의 변수 모두 접근이 가능하다.

// 자식 클래스 변수 = (자식클래스)부모클랫 타임의 변수;
		Child1 c22 = (Child1)c2;
		c22.no2 = 2000;
		System.out.println(c22.no2); 
		c2.no1 = 10000;  //1000 -> 10000으로 변경
		System.out.println(c22.no1); 
	}
}
output:
2000
10000

객체 타입 비교 연산자 instanceof

상속관계에 있는 객체들의 타입을 비교한다.
비교하는 객체가 해당하는 타입이 맞다면 true, 아니면 false를 반환한다.

class A{}
class B extends A{}

class D extends A{}

public class Test {

	public static void main(String[] args) {
		
		A a = new A(); 
		B b = new B(); 
		D d = new D(); 
        
		System.out.println(a instanceof A);//true : a가 참조하는 타입 == A 확인
		System.out.println(a instanceof Object); //true
		System.out.println(a instanceof B);//false	
	}
}

0개의 댓글