Class/220729
Class(1-1)
by pms93
2022. 7. 31.
package inheritance4;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Child1 child1 = new Child1();
// 상위 클래스와 하위 클래스가 동일하게 겹치면(*) 하위 method가 호출된다
child1.method01();
child1.method02(); // *
child1.method03();
// 상위 클래스는 하위 클래스의 method를 참조할 수 없다.
Parent parent = new Parent();
// {
// @Override
// public void method03() {}
// }; // <- 익명클래스
// Parent Class 인스턴스 시에 method03의 기능이 정의되어 있지 않기때문에
// main method로 override하여 재정의를 강제하고 있다.
System.out.println();
parent.method01();
parent.method02();
// p.method03(); <- 오류
System.out.println();
parent = child1;
parent.method01();
parent.method02();
// parent.method03();
// - 상위 클래스의 참조변수에 하위 클래스의 참조값을 대입했다 하더라도
// 'p'는 Parent의 시선으로밖에 바라볼 수 없기 때문에 하위 클래스의 method를 참조할 수 없다.
// - 상위 클래스(Parent)에 하위 클래스의 method(method03() {})를 선언해주게 되면
// 하위 클래스들이 method03() {} 을 호출 할 시 method03()을 각자 고유의 객채가 아닌
// 상위 클래스에서 override하게 되면서 Parent의 시선으로도 method03을 참조할 수 있게 된다.
// - 추상 매서드(abstract method)를 통해서도 override개념을 사용할 수 있다.
System.out.println(parent);
// 업,다운캐스팅
// - 상위 클래스가 하위 클래스를 참조 할 시에는 별도 형변환이 필요 없으나
// 하위 클래스가 상위 클래스를 참조 할 시에는 형변환이 필요하다.
Child1 child11 = (Child1) parent; // 상위 클래스가 하위 클래스로 캐스팅되어 대입되고 있다.
System.out.println();
child11.method01();
child11.method02();
child11.method03();
System.out.println();
childPrint(new Child1());
childPrint(new Child2());
}
public static void childPrint(Parent p) {
// 클래스명 instanceof 자료형
// - 클래스명에 대해 명시한 자료형과 동일한지에 대한 결과를 true, false로 반환해준다.
if (p instanceof Child1) {
Child1 c1 = (Child1)p;
c1.method01();
c1.method02();
c1.method03();
} else if (p instanceof Child2) {
Child2 c2 = (Child2)p;
c2.method01();
c2.method02();
c2.method03();
}
}
}