Java의 업캐스팅

zihooy·2023년 5월 3일
1

Java Programming

목록 보기
7/21
post-thumbnail

Java의 기본 개념 중 업캐스팅에 대해 알아보자

🏹 업캐스팅

업캐스팅이란, 자식 클래스가 부모 클래스 타입으로 캐스팅 되는 것이다.

조금 더 상세하게 설명해보자 !

만약 class A가 있고, class B extends A일때
A a = new B();
이처럼 부모 = 자식인 관계를 업캐스팅이라고 한다.

이를 해석해보자 !

대입연산자를 기준으로,
왼쪽(문법) = 오른쪽(메모리)
업캐스팅의 경우
왼쪽을 보면 a의 객체이므로 A의 문법을 사용할 수 있고,
왼쪽을 보면 b의 객체이므로 A와 B의 메모리를 사용 가능하다.

업캐스팅의 경우 반드시 자식을 보게 되어있다. 만약 자식에 오버라이딩 된 함수가 있다면 자식의 결과로 출력한다.

class A {
	void f1() {
		System.out.println(1);
	}
	void f2() {
		System.out.println(888);
	}
}
class B extends A {
	void f1() {
		System.out.println(2);
	}
	void f3() {
		System.out.println(999);
	}	
}

public class hello {
	public static void main(String[] args) {
		//객체 생성 방법 4가지
		A t1 = new A();	//1)상속과 관계 없는 
		A t2 = new B();	//2)부모 = 자식 (업캐스팅)
		//B t3 = new A();	//3)자식 = 부모 (다운캐스팅) -> error
		B t4 = new B();	//4)자식 >>> 부모 
		
		t2.f1(); // 자식에게 오버라이딩 된 함수(f1())가 있기 때문에 자식의 값 2 출력 
		t2.f2(); // 자식에게 오버라이딩 된 함수가 없기 때문에 부모의 값 888 출력 	
	}
}

🏹 Java의 Upcasting, 이해했는지 잠깐 체크 !

class A {
	void m1() {
		System.out.println(1);
	}
	void m3() {
		System.out.println(3);
	}
	void m4() {
		System.out.println(41);
	}
}
class B extends A {
	void m1() {
		System.out.println(2);
		m2();	//자식의 메모리가 존재하므로 출력됨 
		m3();
		super.m4();
	}

	void m2() {
		System.out.println(4);
	}
	void m4() {
		System.out.println(42);
	}
}

public class hello {
	public static void main(String[] args) {
		A t = new B();	//업캐스팅 
		t.m1();			//자식 메모리가 있으므로 자식에게 간다 !! 출력 결과 2
	}
}

출력 결과는 ??
t.m1() 호출
-> 자식 class B에 m1()이 있으므로 이동
-> System.out.println(2); 실행
-> m2(); 실행 >> 자식 class B에 m2()가 있으므로 이동
-> System.out.println(4); 실행
-> m3(); 실행
-> 자식 class B에 m3()가 없으므로 부모로 이동
-> 부모 class A에 m3()가 있으므로 실행
->System.out.println(3);
-> 실행 후 다시 자식으로 이동
-> super.m4(); 실행
-> super 키워드에 따라 부모 class로 이동
-> System.out.println(41);

2
4
3
41
profile
thisIsZihooLog

0개의 댓글