JAVA

객체 형 변환 [Object reference type] / 오버라이딩 메소드

하늘색도화지 2019. 6. 27. 11:23
728x90

객체 참조형(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
자식의 이름 : 김아들

위에 코드 처럼 하위 객체를 상위 객체에 대입한 후 하위클래스로 형 변환하면 오류가 발생하지 않습니다. 그 결과 하위클래스의 멤버변수와 메소드에 접근하게 됩니다.

728x90

'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