객체 참조형(Object reference type)
Parent parnet = new Child(); 에서 왼쪽과 오른쪽은 다른 객체 입니다. Child는 Parent 를 상속하고 있고 Parent가 Child의 상위 클래스 입니다. 이러한 경우에만 형 변환이 일어나게 됩니다. 반대 일 경우는 오류가 발생할수 있습니다. 왜냐하면 Child는 Parent에서 확장하는 개념이기 때문입니다.
상위 클래스는 하위클래스보다 좁은 범위의 개념이기 때문에 강제 형변환을 해주어야 한다.
Parent.java
public class Parent {
public int age = 68;
public String name = "김부모님";
public void print(){
System.out.println("Parent method :" + age);
System.out.println("Parent method : " + name);
}
}
Child.java
public class Child extends Parent{
public int age = 17;
public String name = "김아들";
public void print(){
System.out.println("Child method :" + age);
System.out.println("Child method :" + name);
}
}
① 상위 = new 상위
public class Main {
public static void main(String[] args) {
Parent p = new Parent();
p.print();
System.out.println("부모의 나이 : "+ p.age);
ystem.out.println("부모의 이름 : "+ p.name);
}
}
Parent method : 68
Parent method : 김부모님
부모의 나이 : 68
부모의 이름 : 김부모님
② 상위 = new 하위
public class Main {
public static void main(String[] args) {
Parent p = new Child();
p.print();
System.out.println("자식의 나이 : "+ p.age);
System.out.println("자식의 이름 : "+ p.name);
}
}
Child method : 17
Child method : 김아들
자식의 나이 : 68
자식의 이름 : 김부모님
상위 클래스 객체에 하위 클래스를 대입하여 하위클래스의 메소드와 상위클래스의 변수를 호출합니다.
③ 하위 = new 상위
public class Main
{
public static void main(String[] args)
{
Child c = (Child)new Parent();
c.print();
System.out.println("자식의 나이 : "+ c.age);
System.out.println("자식의 이름 : "+ c.name);
}
}
Exception in thread "main" java.lang.ClassCastException : Parent cannot be cast to Child at Main.main(Main.java:9)
하위 클래스 객체에 상위 클래스를 대입하려면 형변환을 해야합니다. 하지만 형변환을 해도 오류가 납니다.
public class Main
{
public static void main(String[] args)
{
Parent p = new Child();
Child c = (Child)p;
c.print();
System.out.println("자식의 나이 : "+ c.age);
System.out.println("자식의 이름 : "+ c.name);
}
}
Child method : 17
Child method : 김아들
자식의 나이 : 17
자식의 이름 : 김아들
위에 코드 처럼 하위 객체를 상위 객체에 대입한 후 하위클래스로 형 변환하면 오류가 발생하지 않습니다. 그 결과 하위클래스의 멤버변수와 메소드에 접근하게 됩니다.
'JAVA' 카테고리의 다른 글
[WEBTOB]SSL 인증 패스워드 자동 설정법 (0) | 2022.07.01 |
---|---|
[eclipse] SVN commit 'is out of date' 오류 해결 !! (0) | 2022.07.01 |
SVN ip 변경 (0) | 2020.06.19 |
Quartz 스케줄러 DB 연동 / 관리 (0) | 2020.05.14 |
List<T>.Contains 메서드 (T) (4) | 2017.12.26 |