반응형
오버라이드는 상속한 부모클래스의 메소드를 그대로 사용하지 않고 재선언해서 기능수정
오버라이드 함수는 부모메소드 인자의 타입 및 개수가 일치해야 한다.
오버로딩은 이름은 같지만 다른 인자와 리턴등이 다르며 클래스 상속과 굳이 관련이 없다.
상속받았는데 기능 확장을 위해 메서드의 내용을 개조한 것이 오버라이드이다.
package javaStudy;
//Car 클래스
class Cars{
public Cars(String name){
System.out.println(name + " 을 받아들이는 생성자입니다.");
}
public void run(){
System.out.println("달리다.");
}
}
//Bus 클래스 - Car상속해서 ppangppang메소드 추가
class Buss extends Cars{
public Buss(){
super("소방차"); // 문자열을 매개변수로 받는 부모 생성자를 호출하였다.
System.out.println("Bus의 기본생성자입니다.");
}
public void run(){
//super.run(); // 부모의 run()메소드를 호출할 경우
System.out.println("Bus의 run메소드");
}
public void ppangppang(){
System.out.println("빵빵");
}
}
//Bus 클래스사용 - run메소드 및 추가한 ppangppang메소드를 사용할 수 있다
public class BusExam2{
public static void main(String args[]){
Cars car = new Buss();
car.run();
//car.ppangppang(); // 컴파일 오류 발생
Buss bus = (Buss)car; //부모타입을 자식타입으로 형변환
bus.run(); //Buss run메소드가 실행된다
bus.ppangppang(); //부모에 정의되지 않는 메소드를 수행
}
}
public void run(){
//super.run(); // 부모의 run()메소드를 호출할 경우
System.out.println("Bus의 run메소드");
}
buss클래스는 상속받은 car클래스의 run메서드를 재선언(오버라이드)하여 기능을 확장하여 자신만의 run을 수행한다.
Cars car = new Buss();
car클래스를 상속받은 Buss클래스로 `Cars car`로 car라는 Cars 클래스 객체를 생성하였다.
car.run();
달릴 수 있으나
car.ppangppang();
Buss클래스로 부터 인스턴싱 된 객체이지만 실체 클래스는 Cars로 빵빵할 수 없다.
그러나,
Buss bus = (Buss)car;
부모타입에서 자식타입 (Buss)으로 형변환된 bus객체는
bus.run();
달릴 수 있고
bus.ppangppang();
원래 Cars부모에 정의되지 않는 메서드이지만 Buss객체로 형변환되서 빵빵거릴 수 있다.
반응형
'JAVA' 카테고리의 다른 글
자바 추상 클래스 (0) | 2023.01.24 |
---|---|
super키워드 - 부모 클래스 접근 (0) | 2023.01.24 |
자바 인터페이스 (0) | 2023.01.24 |
자바 예외처리 try ~ catch ~ finally (0) | 2023.01.24 |
자바 list (0) | 2023.01.24 |
댓글