부모형태에서 자식형태로 형변환 - 다운캐스팅
자식형태에서 부모형태로 형변환 - 업캐스팅
업캐스팅 ( 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
'국비지원_핀테크' 카테고리의 다른 글
13일차_ [java] 싱글톤 ( Singleton ) 패턴 (0) | 2024.02.21 |
---|---|
13일차_ [java] 추상 클래스 ( Abstract ), 인터페이스 ( interface ) (0) | 2024.02.21 |
13일차_ [java] 오버라이딩 ( Overriding ), final (1) | 2024.02.21 |
12일차_ [java] 예외 처리 ( Exception ) (0) | 2024.02.20 |
12일차_ [java] 상속 ( Inheritance ) (0) | 2024.02.20 |