티스토리 뷰


* 재정의


 ▷ 상속을 받아서 부모의 메서드를 사용하다보면 본의 아니게 메서드의 내용을 변경시켜서 사용해야 될 때가 있다.

 ▷ 기존 메서드의 이름은 그대로 유지(파라미터까지)하면서 바디의 내용만 {} 바꿔서 사용하는 것을 "재정의" 라고 한다.


 부모클래스-->
 void print(){
  syso("모니터 출력할래");
 }

 자식클래스-->
 void print(){  //명시적으로 하나 만든다. : 재정의 한다. (override)
  syso("프린터에 인쇄할래");
 }



 * 이름은 똑같이 유지하 되, 내용을 변경시켜서 사용한다.
   그럼,  부모의 모니터 출력 메서드도 사용할 수 있고 자식이 재정의한 프린터 인쇄 메서드도 사용할 수 있게된다.

 * 어떻게 하면  모니터 출력인지  프린터 인쇄인지를 구분할까?

 * 기본 방침은 인스턴스를 보고 결정하게 된다.


  객체 = new 부모();
  객체.print()  <-- 모니터
  
  객체 = new 자식();
  객체.print()  <-- 프린터


#실습




package override;


class OutputMachine{
 void print(){
  System.out.println("출력기 (부모)");
 }
}


class Hp extends OutputMachine{


   //print 재정의


 void print(){
  System.out.println("hp프린터(자식)");
 }


 void superPrint(){
  super.print();
  //은닉화된 부모의 메서드 호출
 }


}

public class OverrideTest {

 public static void main(String[] args) {


  // 상속과 상관없음
  OutputMachine machine = new OutputMachine();
  machine.print();
  
  //자식메서드 실행 --> 자식메서드가 호출에 응하게 되어있음 (자식 인스턴스)
  Hp hp = new Hp();
  hp.print();
  

  //재정의 하지 않았다면 -->부모 메서드 나옴


 // override 무시하다 기각하다 (호출해서 나오지않음 부모것을 숨김 (은닉화))

 hp.superPrint(); // 부모를 부를수 있음
  
 }

}




 ----------------------------------------
  double a =10;
  int b=1.1;
  

  double > int
  // 작을 땐 대입이안됨
  상속관계에서는 대소 관계를 따짐
  ----------------------------------------
  hp= new OutputMachine();
  // error가 남 부모것을 받지못함 / 형태가 다를 경우 받지못함 (부모의 크기가  더 크기 때문 )


  hp =(Hp)new OutputMachine(); // 강제 형변환이 되지않음 (에러는 사라짐)
  hp.print();
  

 ※  자식은 부모를 대입받을 수 없음
      부모는 자식을 대입받을수 있음




'Programing > Java' 카테고리의 다른 글

Java2 - 01. 예외처리  (0) 2017.05.10
Java1 - 22. 다형성  (0) 2017.05.10
Java1 - 20. Inheritance(상속)  (0) 2017.05.04
Java1 - 19. Static  (0) 2017.05.02
Java1 - 18. 만들어져있는 클래스 사용 방법  (0) 2017.05.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함