강의로 돌아가기
김진주

오버라이딩을 어떤 식으로 해야하나요?

super.으로 하면 자꾸 오류나는데 public void도... extends Meter 추가하는 게 맞긴 한건가요??? afterMidnight () 되는 거 보면 추가 안해도 되는건가요???

작성중인 코드―TaxiExam.java
1
2
3
4
5
6
7
8
9
10
11
public class TaxiExam extends Meter{
  public static void main(String[] args){
    Taxi taxi = new Taxi();
    taxi.start();
    taxi.afterMidnight();
    taxi.stop(10);

  super.afterMidnight();

  } 
}
작성중인 코드―Meter.java
1
2
3
4
5
6
7
8
public interface Meter{
  public void start();
  public int stop(int distance);

  public default void afterMidnight(){
    System.out.println("자정이 넘었습니다. 할증이 필요한경우 이 메소드를 오버라이드 하세요.");
  }
}
작성중인 코드―Taxi.java
1
2
3
4
5
6
7
8
9
10
11
public class Taxi implements Meter{
  public void start(){
    System.out.println("택시가 출발합니다.");
  }

  public int stop(int distance){
    int fare = distance * 2;
    System.out.println("택시가 도착했습니다. 요금은 "+fare+"입니다.");
    return fare;
  } 
}
1 개의 답변
Reinkaos

일단 이 문제는 인터페이스를 구현해서 해결하는 거지 클래스를 상속받는게 아니에요.
TaxiExam이 Meter를 상속받을 필요도 없고, super 키워드로 부모메서드를 호출할 필요도 없어요.

문제를 잘 읽어보시면 Taxi에서 오버라이드 하라고 했으니깐 Taxi.java 파일만 수정하면되요
즉 interface Meter를 구현하는 클래스 Taxi에서 afterMidnight() 메서드만 마음대로 오버라이드만 해주면 해결됩니다.

  public void afterMidnight() {
    System.out.println("interface의 default 메서드는 오버라이딩 가능하네요");
  }
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.