JAVA

오버라이드 & 클래스 형변환

아이티프로 2023. 1. 24.
반응형

오버라이드는 상속한 부모클래스의 메소드를 그대로 사용하지 않고 재선언해서 기능수정

오버라이드 함수는 부모메소드 인자의 타입 및 개수가 일치해야 한다.

오버로딩은 이름은 같지만 다른 인자와 리턴등이 다르며 클래스 상속과 굳이 관련이 없다.

상속받았는데 기능 확장을 위해 메서드의 내용을 개조한 것이 오버라이드이다.

 

오버라이드

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

댓글