Разница между указанием интерфейса и класса ref на объект? - PullRequest
0 голосов
/ 06 апреля 2020

Пожалуйста, прочитайте полный вопрос, он отличается от этого типа вопроса Разница между интерфейсом и объектами класса

Пример: 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 использует синтаксис для описанного выше варианта использования)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...