Java/java

4주차 - 상속 inheritance (3)

우젼 2022. 9. 3. 14:11

부모 클래스의 생성

public class Parent {
	public void method01() {
		System.out.println("Parent method01");
	}
	
	public void method02() {
		System.out.println("Parent method02");
	}
}

자식 클래스의 생성 1

public class Child1 extends Parent{ // Parent 클래스를 상속 받음을 선언
	
	public void method02() {
		System.out.println("Child1 method02"); // 부모객체에도 있는 메서드
	}
	public void method03() {
		System.out.println("Child1 method03"); // 자식객체에만 있는 메서드
	}
}

자식 클래스의 생성 2

public class Child2 extends Parent{
	public void method02() {
		System.out.println("Child2 method02");
	}
	public void method03() {
		System.out.println("Child2 method03");
	}
}

 

메인클래스

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		List<String> list1 = new ArrayList<>(); // List라는 상위 클래스를 선언 후 ArrayList 라는 하위 클래스로 생성.
		List<String> list2 = new LinkedList<>();
		
		list1.add("ArrayList");
		list2.add("LinkedList");
		
		System.out.println(list1.get(0));
		System.out.println(list2.get(0));
		System.out.println();
		
		Child1 c1 = new Child1();
		c1.method01(); // 부모 메서드
		c1.method02(); // 부모 - 자식 메서드
		c1.method03(); // 자식 메서드
		System.out.println();
		
		Parent p = new Parent();
		p.method01();
		p.method02();
//		p.method03(); 부모 메서드에는 없는 메서드이기 때문에 실행이 되지 않는다.
		System.out.println();
		
		int intData1 = 10;
		double doubleData = intData1; //큰 공간에 작 공간의 데이터 입력
		int intData2 = (int) doubleData; // 작은 공간에 큰 공간의 데이터 입력
		
		// 업캐스팅 : 하위 객체의 참조 값을 상위 객체의 참조변수에 입력.
		Parent p2 = c1; 
		p2.method01();
		p2.method02();
		System.out.println();
		
		// 다운 캐스팅 : 상위 객체의 참조 값을 하위 객체의 참조변수에 입력.
		Child1 c11 = (Child1)p2; 
		c11.method01();
		c11.method02();
		c11.method03();
		
		System.out.println();
//		Parent 인스턴스에 접근은 자식의 자료형으로는 안됨.
//		Child1 c111 = (Child1)p;
//		c111.method01();
//		c111.method02();
//		c111.method03();
//		
		
		childPrint(new Child1());
		childPrint(new Child2());
		
		parentPrint(new Child1());
		parentPrint(new Child2());
	}
	public static void childPrint(Parent p) {
		System.out.println("\nchildPrint");
		p.method01();
		p.method02();
		
		if(p instanceof Child1) {
			Child1 c1 = (Child1)p;
			c1.method03();
		}else if(p instanceof Child2){
			Child2 c2 = (Child2)p;
			c2.method03();
		}
	}
	public static void parentPrint(Parent p) {
		System.out.println("\nparentPrint");
		p.method01();
		p.method02();
		p.method03();
	}
	
//	public static void childPrint1(Child1 c) {
//		c.method01();
//		c.method02();
//		c.method03();
//	}
//	public static void childPrint2(Child2 c) {
//		c.method01();
//		c.method02();
//		c.method03();
//	}
}