2017-10-28 14 views
-2

좋아요 그래서 인터페이스이 메소드는 어디에서 호출됩니까?

interface Action { 
    void doSomething(); 
} 

그리고 인터페이스의 참조를 생성하고 클래스의 객체를 할당하는 경우 이제 인터페이스

class Greeting implements Action { 

    public String getGreeting() { 
     return "Hello, World!" ; 
    } 

    public void doSomething() { 
     System.out.println(getGreeting()); 
    } 

} 

를 구현하는 클래스를 고려

Action action = new Greeting(); 
action.doSomething(); // Calls the getGreeting() method and prints it. 

방법 이게 효과가 있니?

+0

이렇게하면 인터페이스 'Action' 만 명시 적으로 요청했습니다 :'Action action = new Greeting();'. 인터페이스를 사용하는 하위 클래스에 의해 구현되는 추가 메서드는 모두 사용할 수 없습니다. – StuartLC

+0

동작 유형에서 동작 변수를 정의하므로 getGreeting() 메서드를 볼 수 없습니다. Greeting 클래스에서 getGreeting() 메서드는 로컬 메서드로 액세스 할 수 있습니다. – M2E67

+0

'Greeting implements actions'. '행동'대신 '행동'이되어서는 안됩니까? –

답변

1

Action 유형의 변수 action을 선언했습니다.

즉, 해당 인터페이스의 일부인 메소드 만 사용할 수 있습니다.

당신이 전화

, 그것은 action 유형 Action이며 그 형태가 getGreeting() 방법이 없기 때문에 즉 Greeting

1

당신은 그 오류가 표시, 구현에 위임된다.

Greeting action = new Greeting(); 
action.getGreeting(); //should work 

또는 캐스트 actionGreeting A를 :

당신은 Greetingaction를 선언하거나 getGreeting()에 액세스해야하는 경우

당신은 Action 유형에 Greeting의 개체를 할당 한
Action action = new Greeting(); 
((Greeting)action).getGreeting(); //Again, should work 
1

. Greeting의 객체는 getGreeting()이지만, Action 유형은 이해할 수 없습니다.

Action 개체를 시도한 이유는 getGreeting 메서드가 지원되지 않기 때문입니다.