package ch07;

public class Ch0705
{
 //상속과 클래스 래퍼런스의 관계 (중요) -> object -> 컬렉션 -> 제너릭
 public static void main(String[] args)
 {
  Son son = new Son();
  son.playing(); //형변환전 son에서 새로 추가된함수
 
  Father father; //인스턴스화(초기화)되지 않은..
  //★ 클래스간의 형변황 되려면 반드시 해당클래스간의 계승관계가 있어야 함.
  //1) 서로 계승관계를 가지고 있는 두개의 레퍼런스간의
  //대입실험, 상위클래스 레퍼런스에 하위클래스 래퍼런스를 대입(형변환 필요없다)
  father = son;
 
  //father.playing(); -> X : 하위클래스의 멤버변수는
  //상위클래스의 레퍼런스에서 호출이 불가능 하다.

  //2) 하위클래스의 레퍼런스에 상위클래스 레퍼런스를 대입하는 경우
  //계승관계가 있을 경우.
  //반드시 형변환을 해야 가능.
  //반대상황.. 상위클래스를 하위클래스로 넣을려고 할때..
  Son son1; //초기화되지 않은 레퍼런스 변수
  son1 = (Son)father;
  son1.playing();
 }
}

****** Father.java ******
package ch07;

public /* final */ class Father //final 상속시키지 않겠다고 명시한것.
{
 public /* final */ void work()  // final 하위클래스에서 오버라이딩 허용안함.
 {
  System.out.println("아버지께서 일하셔"); //상속과 클래스 레퍼런스 관계 위해...  
 }
}

****** Son.java ******
package ch07;

public class Son extends Father
{
 //son에서 새로 추가된 함수
 public void playing()
 {
  System.out.println("놀고먹는 거 좋아해");  
 }
 
 public static void main(String[] args)
 {
   
 }
}

Posted by 말없제이
,