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();
// }
}