개발 일기
JAVA 상속 공부 3 (feat. 객체형변환) 본문
객체의 형변환!!
부모 자식 관계에있는 클래스 틀에서만 가능하다.
ex) 자식 타입 객체의 주소를 부모 타입 객체의 주소로 형변환(주소 변경 안됨, 타입만 변경 가능) ex) 부모 타입 객체의 주소를 자식 타입 객체의 주소로 형변환(주소 변경 안됨, 타입만 변경 가능)
자식객체 타입의 주소를 부모 클래스 타입으로 형변환
- 자동으로 이루어진다(묵시적)
Child c = new Child();
Parent pppp = c;
- 자동으로 이루어진다(묵시적)
부모 객체를 자식클래스타입으로 형변환
- 원칙적으로는 불가능하다
- 부모의 탈을쓴 자식객체 는 가능하다.
Parent p=new Parent();
Child cccc = p;(X)
public class Parent{}
public class Child extends Parent{}
코딩 예시))
class Parent{
public void method1() {
System.out.println("Parent.method1()");
}
public void method2() {
System.out.println("Parent.method2()");
}
public void method3() {
System.out.println("Parent.method3()");
}
public void method4() {
}
public void method5() {
}
}
class Child extends Parent{
public void method4() {
System.out.println("Child.method4()");
}
public void method5() {
System.out.println("Child.method5()");
}
}
public class ParentChildTypeCastingMain {
public static void main(String[] args) {
System.out.println("-------------Child --> Parent--------------"); // 기본형 상속하는 부모 클래스에 대한 메소드 노출
Child c1 = new Child();
c1.method1();
c1.method2();
c1.method3();
c1.method4();
c1.method5();
//2. 자식객체 타입의 주소를 부모 클래스 타입으로 형변환
Parent p1 = c1; // 부모클래스를 자식클래스로 형변환
p1.method1();
p1.method2();
p1.method3();
/*
p1.method4(); // 노출 시 에러 남 부모 메소드에 없음
p1.method5();
*/
System.out.println("-------------Parent-->Child--------------");
/*
3. 부모 객체를 자식클래스타입으로 형변환
- 원칙적으로는 불가능하다
- 부모의 탈을쓴 자식객체 는 가능하다.
*/
Parent p2 = new Parent();
// Child c2 = p2; // 부모 객체를 자식클래스타입으로 형변환 불가함
/*
* << compile error >>
* Type mismatch: cannot convert from Parent to Child
* 강제형변환 시 compile은 가능하나 실행 시 예외 발생
* - java.lang.ClassCastException: class Parent cannot be cast to class Child
* Child c2 = (Child)p2;
*/
/*
* 부모의 탈을 쓴 자식객체는 생성 가능
*/
Parent p3 = new Child(); // p3는 child type 객체로 생성됨
Child c3 = (Child)p3; // 부모 객체를 자식클래스타입으로 형변환 불가함
System.out.println("-------------재정의--------------");
Parent p4 = new Child();
p4.method1();
p4.method2();
p4.method3();
}
}
오늘은 상위 클래스에 대한 형변환을 공부해보았습니다!
감사합니다.
'JAVA 공부' 카테고리의 다른 글
JAVA 상속 공부 5 (feat. 인터페이스 Interface) (0) | 2021.06.18 |
---|---|
JAVA 상속 공부 4 (feat. 추상클래스 abstract - 제한자) (2) | 2021.06.17 |
JAVA 상속 공부 2 (feat.Overriding = 재정의 란??) (0) | 2021.06.15 |
JAVA 상속(extends)에 대한 복습! (0) | 2021.06.14 |
객체 지향 프로그래밍(Object Oriented Programming_OOP)이란??? (0) | 2021.06.04 |
Comments