JAVA-Basic

4.상속(Inheritance)과 다형성의 구현과정

Jungsoomin :) 2020. 7. 10. 11:26

상속 방법.

public class Super {
	int i;
	
	void method() {
		
	}
	
}
//상속정의는 extends 키워드로 한다
public class Sub extends Super{
	void method2() {
		
	}
	
}

 

다형성의 구현

 

부모클래스

public class KindaCat {
	public void sound() {
		System.out.println("고양이과 울다");
	}
}

 

자식클래스

public class Cat extends KindaCat{
	
	//메서드 오버라이딩
		@Override
		public void sound() {
			System.out.println("야옹");
		}
}
public class Tiger extends KindaCat{
	
	//메서드 오버라이딩
	@Override
	public void sound() {
		System.out.println("어흥");
	}
	public void hunt() {
		System.out.println("사냥을합니다.");
	}
}

 

 

여기까지는 쉬이 이해할 수 있는 부분이었는데 다형성 구현을 하기가 쉽지가 않더라.

 

	public static void main(String[] args) {
		KindaCat kindaC = new KindaCat();
		kindaC.sound();
		
		Cat cat1 = new Cat();
		cat1.sound();
		
		
		// 상속관계임으로 프로모션이 진행된다.	
		kindaC = cat1;//같은 자식 인스턴스를 참고하고 있다는 것.
		System.out.println(cat1 == kindaC);//true
		
		//실행을 해보면 자식객체의 메서드가 실행된다. <<<<<<
		kindaC.sound();
		
		
		
		
		Tiger tig1 = new Tiger();
		tig1.sound();
		
		//같은 자식 인스턴스를 참고하고 있다!
		kindaC = tig1;
		//실행을 해보면 자식객체의 메서드가 실행된다. <<<<<<
		kindaC.sound();
		
		
		tig1.hunt();//자식객체의 메서드 실행
		//kindaC.hunt(); 컴파일에러, 부모객체에 정의된 것만 사용가능하다.
	}
	
	//다형성의 구현<<<<<<<<<
	private static void printCry(KindaCat c) {
		//자식객체의 부모타입 프로모션을 보면, 안전하게 값을 대입할 수 있으며 다른 결과를 얻을 수도 있게된다.
		c.sound();
	}
}

 

Call by Reference 를 이해하게 되면, 자식객체의 부모객체 Promotion 과정에서 참조변수에 자식객체의 주소 값이 할당된다는 것을 이해하게 되면, 애매했던 다형성구현과 안정성 보장이 좀 잡힌듯 한 느낌을 받는다.