본문 바로가기

국비지원_핀테크

13일차_ [java] 업캐스팅 ( upcasting ), 다운캐스팅 ( downcasting )

 

 

 

부모형태에서 자식형태로 형변환 - 다운캐스팅

자식형태에서 부모형태로 형변환 - 업캐스팅

 

업캐스팅 ( upcasting )

package upcasting;

class A01{
	public void test() {
		System.out.println("aaaa");
	}
}
class B01 extends A01{
	public void test() {
		System.out.println("bbbb");
	}
}
class C01 extends A01{	
	public void test() {
		System.out.println("cccc");
	}
}

public class Ex01 {
	public static void main(String[] args) {
		A01 a;
		// 자식 클래스를 부모 클래스 자료형 형태로 저장 = 업캐스팅
		a = new B01(); a.test(); // bbbb
		a = new C01(); a.test(); // cccc
		
		
		/*
		B01 b;
		C01 c;
		b = new B01(); // b 객체화
		c = new C01(); // c 객체화
		b.test(); // bbbb 출력
		c.test(); // cccc 출력
		*/
	}
}

업캐스팅 예시 ( 위와 같이 업캐스팅한 경우 부모 자료형 변수 a 에 자식 클래스를 객체화 시키면 메소드가 오버라이딩되기 때문에 자식 클래스의 메소드만 출력된다 )

 

package upcasting;

class Parents{
	public void famillyName() {
		System.out.println("이");
	}
	public void name() {
		famillyName();
		System.out.println("순신");
	}
}

class Daughter extends Parents{
	public void name() {
		famillyName();
		System.out.println("국주");
	}
}

class Son extends Parents{
	public void name() {
		famillyName();
		System.out.println("기광");
	}
}

public class Ex02 {
	public static void main(String[] args) {
		/*
		Parents par = new Parents();
		par.name();
		
		Daughter d = new Daughter();
		d.name();
		
		Son s = new Son();
		s.name();
		*/
		
		
		
		// 1번 아빠이름, 2번 딸이름, 3번 아들이름
		// 번호를 선택함에 따라 해당 이름이 나오게 세팅
		Parents par;
		// Daughter d;
		// Son s;
		
		// Daugter, Son 클래스의 부모클래스가 모두 Parents로 같으니
		// 번호 선택 시 부모 클래스 변수에 자식 클래스를 객체화하여 사용 ( 메소드 오버라이딩됨 )
		int num = 3;
		if(num == 1) {
			par = new Parents();
			par.name();
		}else if(num == 2) {
			par = new Daughter();
			par.name();
		}else if(num == 3) {
			par = new Son();
			par.name();
		}
	}
}

업캐스팅 사용 예시

 

 

 

 

 

 

 

 

 

 

다운캐스팅 ( downcasting )

package upcasting;

class Test{}

public class Ex03 {
	public static void main(String[] args) {
		// 업캐스팅 ( int, String 자료형을 부모 형태의 자료형에 저장 )
		Object num = 100;
		Object name = "홍길동";
		Object t = new Test();
		System.out.println(num.getClass()); // class java.lang.Integer
		System.out.println(name.getClass()); // class java.lang.String
		
		// 컴파일 오류 발생
		// 오버라이딩이 진행되어 num 변수의 자료형이 Object 로 변경되었기 때문
		// int a = 100 + num;
		
		// 다운캐스팅 ( Object 로 업캐스팅된 num 을 int 형으로 명시하여 다운캐스팅 )
		int a = 100 + (int)num;
		System.out.println(a);
	}
}

업캐스팅된 자료를 기존의 자료처럼 사용하려면 본인의 형태로 되돌리는 다운캐스팅 과정이 필요하다

728x90