класс и интерфейс - PullRequest
       4

класс и интерфейс

2 голосов
/ 08 января 2010

Интересно, 3 вещи.

1: Если я реализовал интерфейс (с методом) в суперклассе, где я объявляю этот метод, а затем расширяю этот суперкласс в другом классе. Тогда мне не нужно переопределять этот метод, верно?

2: Но если я не объявляю этот метод в суперклассе, но в дочернем классе, то я создаю экземпляр суперкласса. Что происходит потом? Он не содержал никакого метода из экземпляра.

3: Не могли бы вы использовать реализовать в классе, а затем не объявлять этот метод? Возможно, он будет использоваться в качестве суперкласса только для расширения других классов. А затем просто объявите этот метод в дочерних классах, или вам нужно объявить его в текущем классе, в котором вы реализуете интерфейс?

Ответы [ 3 ]

3 голосов
/ 08 января 2010
  1. Предполагая, что вы имели в виду «переопределение» вместо «redeclare», это правильно.

  2. Зависит от того, объявлен ли класс абстрактным или нет. Если суперкласс является абстрактным, то дочерний класс должен либо реализовать его, либо быть объявленным абстрактным. Если суперкласс не является абстрактным, он не будет компилироваться.

  3. Объявите реферат класса, если вы не хотите его реализовывать.

Подробнее об этом на Учебное пособие Sun по интерфейсам и наследованию .

2 голосов
/ 08 января 2010

Это помечено для PHP и Java - я отвечу за Java.

  1. Правильно, он унаследует реализацию метода от суперкласса.

  2. Если суперкласс все еще объявлен как реализующий интерфейс, то это вызовет ошибку во время компиляции, поэтому это невозможно.

  3. Нет, как я уже говорил, если вы реализуете интерфейс, вы должны реализовать или наследовать методы, которые этот интерфейс объявляет. Единственное исключение - если класс равен abstract, и в этом случае вам не нужно предоставлять реализацию для методов интерфейса (которые неявно abstract). Абстрактные классы не могут быть созданы.

1 голос
/ 08 января 2010

Просто добавьте к тому, что уже отвечено на 2-й вопрос (для Java):

Как упоминалось в другом ответе (@BalusC), если ваш суперкласс сообщает, что он реализует интерфейс и не обеспечивает реализацию метода (ов) в интерфейсе, то вы должны пометить суперкласс как абстрактный класс. Но вы cannot instantiate суперкласс, так как это абстрактный класс.

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