• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

인터페이스와 가상 메서드

22.12.21 10:26 작성 조회수 195

0

아래 코드에서 Customer 클래스는 Buy, Sell 인터페이스를 구현하고 buy, sell, order 메서드를 갖고 있는데,

buyer.sell()은 왜 실행되지 않는건지 궁금합니다.

가상메서드에 의해 Customer 클래스의 sell 메서드가 불리는 것이 아닌가요?

public class CustomerTest {

	public static void main(String[] args) {
		Customer customer = new Customer();
		
		Buy buyer = customer;
		buyer.buy();
		
		Sell seller = customer;
		seller.sell();
		
//		가상 메서드 : 인스턴스의 메서드가 불림
		customer.order();
		buyer.order();
		seller.order();
	}

}

답변 1

답변을 작성해보세요.

0

@k1m2njun님의 프로필

@k1m2njun

2023.03.12

buyer 의 타입이 Buy 입니다.

Buy 인터페이스에는 구현하지 않은 buy() 메서드와
기본 메서드인 order() 두 가지이죠.

인스턴스를 인터페이스 타입의 변수에 바인딩하는 경우, 각 인터페이스에서 선언한 메서드만 호출 할 수 있습니다.
반면 두 인터페이스의 메서드를 구현한 클래스의 인스턴스의 경우 모두 호출할 수 있습니다.

그런데 두 인터페이스에서 중복된 메서드를 구현 클래스에서 재정의하고
이를 인터페이스 타입의 변수와 구현 클래스의 인스턴스로 호출한 결과는
모두 인스턴스의 오버라이딩한 메서드가 호출됩니다.