메서드 오버라이딩

Mia Lee·2021년 12월 9일
0

JAVA

목록 보기
70/98
코드를 입력하세요

package ex_overriding;

public class Ex1 {

public static void main(String[] args) {

	/*
	 * 메서드 오버라이딩(Method Overriding) = 메서드 재정의
	 * 
	 * < 오버라이딩 작성 규칙 >
	 * 1. 슈퍼클래스의 메서드 시그니쳐(이름, 파라미터, 리턴타입)가 완벽하게 동일해야한다!
	 * 2. 슈퍼클래스 메서드의 접근제한자보다 범위가 좁아질 수 없다.
	 *    (ex. 슈퍼클래스가 public 이면 서브클래스도 public 이어야함)
	 *    (ex2. 만약 protected 이면 서브클래스는 public, protected 가능)
	 */
	
	Child c = new Child();
	c.childPrn(); // 서브클래스에서 정의한 메서드
	c.parentPrn(); // 서브클래스에서 오버라이딩 된 메서드
	// => 슈퍼클래스의 parentPrn() 메서드는 보이지 않으므로
	//    접근이 불가능하게 됨(은닉됨)
	
}

}

class Parent {

protected void parentPrn() {
	System.out.println("슈퍼클래스의 parentPrn() 메서드!");
	
}

}

// Child 클래스 정의 - Parent 클래스를 상속
class Child extends Parent {

public void childPrn() {
	System.out.println("서브클래스의 childPrn() 메서드!");
	
}

// 슈퍼클래스로부터 상속받은 parentPrn() 메서드 오버라이딩
// => 리턴타입, 이름, 파라미터가 모두 동일해야함
// => 접근제한자는 좁아질 수 없음
public void parentPrn() {
	System.out.println("서브클래스에서 오버라이딩 된 parentPrn() 메서드!");
	
} 

}

package ex_overriding;

public class Ex2 {

	public static void main(String[] args) {

		// Car 클래스의 인스턴스를 생성하여 메서드 호출
		Car car = new Car();
		car.speedUp();
		car.speedDown();
		car.addFuel();
		
		// Car 클래스를 상속받은 DieselCar 와 ElectricCar 클래스의 
		// 인스턴스를 생성하여 오버라이딩 된 메서드를 각각 호출
		DieselCar dc = new DieselCar();
		dc.speedUp();
		dc.speedDown();
		dc.addFuel();
		
		ElectricCar ec = new ElectricCar();
		ec.speedUp();
		ec.speedDown();
		ec.addFuel();
		
	}

}

class Car {
	
	public void speedUp() {
		System.out.println("자동차 속력 증가!");
		
	}
	
	public void speedDown() {
		System.out.println("자동차 속력 감소!");
		
	}
	
	public void addFuel() {
		System.out.println("자동차 연료 공급!");
		
	}
	
}

/*
 * 디젤 자동차(DieselCar) - Car 클래스 상속
 * Car 클래스의 메서드를 오버라이딩하여 DieselCar 만의 기능을 재정의
 * speedUp() - "DieselCar 방식으로 속력 증가!"
 * speedDown() - "DieselCar 방식으로 속력 감소!"
 * addFuel() - "주유소에서 디젤 연료 공급!"
 *  
 */
class DieselCar extends Car {
	
	public void speedUp() {
		System.out.println("DieselCar 방식으로 속력 증가!");
		
	}
	
	public void speedDown() {
		System.out.println("DieselCar 방식으로 속력 감소!");
		
	}
	
	public void addFuel() {
		System.out.println("주유소에서 디젤 연료 공급!");
		
	}
	
}

// 전기 자동차 - Car 클래스 상속
class ElectricCar extends Car {

	// Car 클래스의 메서드를 오버라이딩 하여 ElectriCar 만의 기능을 재정의
	// 자동 오버라이딩 단축키 : Alt + Shift + S -> v
	// => 자동 오버라이딩을 수행하면 @Overrider 어노테이션이 붙게 됨
	//    오버라이딩 규칙을 위반하면 오류가 발생하도록 함
	//    (ex. 오버로딩, 오타로 인한 이름 입력 오류 등)
	@Override
	public void speedUp() {
		System.out.println("ElectricCar 방식으로 속력 증가!");
	}

	@Override
	public void speedDown() {
		System.out.println("ElectricCar 방식으로 속력 감소!");
	}

	@Override
	public void addFuel() {
		System.out.println("전기 충전소에서 배터리 충전!");
	}
	
}










0개의 댓글