티스토리 뷰
* 재정의
▷ 상속을 받아서 부모의 메서드를 사용하다보면 본의 아니게 메서드의 내용을 변경시켜서 사용해야 될 때가 있다.
▷ 기존 메서드의 이름은 그대로 유지(파라미터까지)하면서 바디의 내용만 {} 바꿔서 사용하는 것을 "재정의" 라고 한다.
부모클래스-->
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 |