/*내용을 복사 한 후 이클립스에서

ctrl + shift + F를 눌러주세요!!*/

 

 

//P.272 다형성(polymorphism)/ 참조변수의 형변환 ②
// 예문 하나만 더 보고 넘어가겠숨돠~~
//머리에 팍~! 하고 들어오지 않아서..ㅋㅋ

package JavaTest;

public class CastingTest2 {

 public static void main(String[] args) {

  Car7 car = new Car7();    //인스턴스화 시키고,
  
  Car7 car2 = null;             //car2 로 null 값
  
     FireEngine fe = null;
    
     //자 여기도 집중해서 보자!
    
     car.drive();  //그렇지 가능하고,
    
     fe = (FireEngine)car2;   //null 을 가지고 있는 놈끼리.. 암튼.. 부모를 자식으로 다운캐스팅 했음!
     fe = (FireEngine)car;    //근데!!! 이놈이 문제야... 조상타입의 인스턴스는 자손타입의 인스턴스 참조로 허용이 되지 않아!!
    
     // 아...쫌 이해된다..슬슬... 밑에다가 나만의 공식처럼 써야겠어..ㅋㅋ 암튼 위에 놈은 주석처리해라~
    
     car2 = fe;  //자식을 부모로 업캐스팅!
     car2.drive(); //부모(자기) 인스턴스만 사용가능..ㅋ
  
 }

}


//앗! 정리하자 세현아~
//우선 캐스팅을 해서 쓸려면 클래스 참조형까지 쓰고 null 을 적어야해..
// Car car = null;
// Fire fe = null;
// 이렇게 하면 업캐스팅이던 다운캐스팅 이던 할 수 있어~~!
// 자식을 부모로 형변환 하면 업캐스팅 : 이때는 형변환을 생략이 가능하고,
// 부모를 자식으로 형변환 하면 다운캐스팅 : 이때는 형변환 생략 불가능, 복습삼아! 밑에
// car = fe();   정답은? ㅇㅋㅅㅌ
// fe = (FireEngine)car; 정답은? ㄷㅇㅋㅅㅌ
//오케바리! 이해했어!! 아.. 이게 눈에 쫌 숙달이 되야할터인데.ㅋㅋㅋㅋ

Posted by 옆모습오빠
:

/*내용을 복사 한 후 이클립스에서

ctrl + shift + F를 눌러주세요!!*/

 

 

//P.265 다형성(polymorphism)/ 참조변수의 형변환
//와..이번 장은 정말로...대박이다.. 더럽게 어렵네..;;다형성은 대충이해가 가는데..
//형변환이 대박일세..ㅋㅋ
//우선 다형성 부터~ 객체지향개념의  2번째 중요사항! 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있다.!
//예를 들자면... Tv t = new CaptionTv(); (Tv : 부모/ CaptionTv : 자식) 이거는 가능한데..반대는 X
//에잇! 장난하나?! ...어쨌든 이것의 확장 개념인 형변환을 예제로 보면서 익혀보자..ㅗ(-_-)ㅗ

package JavaTest;

class Car7{
 
 String color;
 int door;
 
 void drive(){
  
  System.out.println("출발~~부르릉!!");
 }
 
 void stop(){
  
  System.out.println("정지!!");
 }
}

class FireEngine extends Car7{
 
 void water(){
  
  System.out.println("물 뿌리자!!");
 }
}

//여기까지 클래스 설계~! FireEngine 은 Car7 를 상속받았다..^ 부모자식 관계는 눈에 들어오지 그럼 다음으로 넘어가자!

public class CastingTest1 {

 public static void main(String[] args) {

  //자! 여기서 부터 약간 집중해서 보자!! 많이 헷갈린다..ㅠ
  
  Car7 car = null;   // Car7 클래스를 변수 car 로 선언하고 null 값을 주었다..썅..이건 머야?! (-_-)a
  
  FireEngine fe = new FireEngine();  // FireEngine 을 인스턴스화 시켰다.. 좋아!
  
  FireEngine fe2 = null;  //얼래? FireEngine 을 변수 fe2로 선언하고 null 값...
  
  
  fe.water();       //FireEngine 클래스의 water() 메서드를 호출...
  
  car = fe;  //★★ 오늘의 하이라이트 납셨네요.. fe 그러니깐 FireEngine 인스턴스를 참조변수 car 로 업캐스팅을 했습니다.
  // 아놔~ 생긴것도 쫌 그런데....쩝~ 원래 이놈은 이렇게 생겼다네요...( car7 = (car7)fe; ) 근데 이렇게 안써도 되는 이유는
  // 자식클래스가 부모클래스로 형변환이 될때는 생략이 가능하다고 하네요..
  // ※결론 : 부모였던 car 는 자식인 FireEngine 의 인스턴스를 사용할 수 있다네...헐..이거 불가능 아닌가??? 근데 ... 더욱긴건
  // car 는 fe 의 멤버가 아닌 water() 는 사용할 수 없다네.. 아놔~ 지금 말장난하는건가...ㅠ 당연한거 아닌가..암튼 Pass~
  
  //car.water();   <-- 이렇게는 안된다 하네요.. 당연한 건데..(-_-)ㅗ
  
  fe2 = (FireEngine) car;  //★★ 두번째 하이라이트... car 인스턴스를 FireEngine 인스턴스인 fe2 로 다운 캐스팅을 했숨돠!
  // 이놈은 내가 알고 있는 형변환 형태라 쫌 친근하네그려~ㅋㅋ 근데 웃긴건 다운캐스팅은 생략이 불가능 하다는 것만 기억하면 될듯..
  // ※결론: 이놈은 car7 와 FireEngine 모두의 인스턴스를 사용이 가능하다는것.. 이것도 당연한건데..헐...
  
  fe2.water();  //Good~~
  
  
 }

}

//와..역시 대박이다..업캐스팅 다운캐스팅...알겠는데..이거..실제 코드로 보면 많이 헷갈릴듯.~~ㅠ

Posted by 옆모습오빠
: