본문 바로가기
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();
		}
	}
}

'Class > 220729' 카테고리의 다른 글

Class(2-1)  (0) 2022.07.31
Class(1-5)  (0) 2022.07.31
Class(1-4)  (0) 2022.07.31
Class(1-3)  (0) 2022.07.31
Class(1-2)  (0) 2022.07.31