상속 방법.
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 과정에서 참조변수에 자식객체의 주소 값이 할당된다는 것을 이해하게 되면, 애매했던 다형성구현과 안정성 보장이 좀 잡힌듯 한 느낌을 받는다.
'JAVA-Basic' 카테고리의 다른 글
6.Interface와 다형성의 구현과정 (0) | 2020.07.10 |
---|---|
5.추상클래스와 상속관계의 Promotion & Casting (0) | 2020.07.10 |
3.Overloading 과 접근제한(AccessModifier) (0) | 2020.07.10 |
2.Class와 멤버 (0) | 2020.07.10 |
1. 원시타입 변수와 참조타입 변수의 할당 원리 (0) | 2020.07.10 |