Пожалуйста, прочитайте полный вопрос, он отличается от этого типа вопроса Разница между интерфейсом и объектами класса
Пример: 1
Класс, реализующий интерфейс
public interface a{
void foo();
}
public class b implements a{
@Override
void foo(){}
void bar(){}
}
Рабочее поведение
a asd=new b(); can call only foo()
b asf=new b(); can call both foo() and bar()
Надеюсь, здесь все ясно.
Пример 2:
Теперь есть один класс CheckingPhase
и IdentifyCheckingPhase
class IdentifyCheckingPhase {
private static a getPhase() {
return a;
}
private static void matchPhase(){
(CheckingPhase)IdentifyCheckingPhase.getPhase().bar();
}
}
class CheckingPhase implements a {
@Override
void foo() {
}
void bar(){
}
}
В Example 1
. Экземпляр интерфейса может вызывать только собственный реализованный метод в классе, а экземпляр класса может обращаться ко всем методам (сам класс и интерфейс тоже). Если это так, уверен, что что-то другое будет поддерживаться на стороне компилятора, поэтому его можно дифференцировать.
Сомневаюсь во-первых, правильно ли говорить, что ссылка Interface и Class всегда указывает на экземпляры разных типов одного и того же класса? Наверное, да, вот они умеют вызывать свои методы. (Интерфейс имеет только свои собственные методы, но класс ref может вызывать все)
Если нет, то Во втором примере a
, возвращаемое из getPhase()
, не должно заменяться на CheckingPhase
в matchPhase()
и вызвать его метод экземпляра класса. Потому что a
разрешено звонить только foo
, а CheckingPhase
может звонить foo and bar
обоим.
Сомневаюсь, 2, мне интересно, синтаксически правильно ли использовать CheckingPhase
вместо a
в то время как переходя от метода getPhase()
к matchPhase()
?
Я надеюсь, ясно, что я пытаюсь спросить. Пожалуйста, дайте мне знать, если вопрос не ясен. (Подробнее о том, как java использует синтаксис для описанного выше варианта использования)