본문 바로가기
언어/JAVA

메서드 재정의(overriding)

by step 1 2021. 4. 18.
반응형

하위 클래스에서 메서드 재정의

오버라이딩: 상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않은 경우 하위 클래스에서 동일한 이름의 메서드를 재정의 할 수 있음

 

	@Override
	public int clacPrice(int price) {
		bonusPoint += price * bonusRatio;
		price -= (int)(price * saleRatio);
		return price;
	}

@overriding 애노테이션 (annotation)

  • 애노테이션은 원래 주석이라는 의미
  • 컴파일러에게 특별한 정보를 제공해주는 역할

@Override: 재정의된 메서드라는 정보 제공

@FuctionalInterface : 함수형 인터페이스라는 정보 제공

@Deprecated: 이후 버전에서 사용되지 않을 수 있는 변수, 메서드에 사용됨

@SupperessWarnings: 특정 경고가 나타나지 않도록 함

 

@overriding 애노테이션은 재정의 된 메서드라는 의미로 선언부가 기존의 메서드와 다른 경우 에러가 남

 

형 변환과 오버라이딩 메서드 호출

Customer vc = new VIPCustomer();

vc 변수의 타입은 Customer지만 인스턴스의 타입은 VIPCustomer임

자바에서는 항상 인스턴스의 메서드가 호출 됨(가상메서드의 원리)

자바의 모든 메서드는 가상 메서드임

 

package ch27;

public class CustomerTest {

	public static void main(String[] args) {
		
		Customer customerLee = new Customer(10010, "이순신");
		customerLee.bonusPoint = 1000;
		int price = customerLee.clacPrice(1000);
		
		System.out.println(customerLee.showCustomerInfo() + price);
		
		VIPCustomer customerKim = new VIPCustomer(10020, "김유신");

	    customerKim.bonusPoint = 10000;
	    
	    price = customerKim.clacPrice(1000);
	    System.out.println(customerKim.showCustomerInfo() + price);
	    
	    Customer vc = new VIPCustomer(12345, "noname");
	    
	    System.out.println(vc.clacPrice(1000));
	}
}

 

 

반응형