2009-12-24 4 views
3

У меня есть два вопроса относительно интерфейсов в Java. 1) Если класс реализует все интерфейсные методы интерфейса I, не объявляя себя в качестве их реализации, может ли он по-прежнему использоваться как вход в переменные типа I? 2) Подкласс класса A, который реализует интерфейс I, наследует соответствие этому интерфейсу или должен ли он объявлять себя как реализующий I?Наследование реализации интерфейса в Java

ответ

16

Если класс происходит реализовать все методы интерфейса интерфейса I, без объявления себя как их реализации, она может все еще быть использованы в качестве входных переменных типа I?

Нет. Что вы описываете, более сродни duck typing.

ли подкласс класса А, который реализует интерфейс я наследует соответствие с этим интерфейсом, или должен также заявить о себе как реализации I?

Предполагая, что вы имеете в виду:

public class A implements I { /* ... */ } 

public class B extends A { /* ... */ } 

В этом случае B реализует I.

+0

О нас: общественный интерфейс I {public void hey(); } Публичный класс X {public void hey() {/*...*/} Публичный класс A расширяет X реализует I {} Это работает? – Dois

2
  1. Это означает «Может ли он удовлетворить принцип замещения Лискова?», Ответ «нет».
  2. Класс B соответствует его родительскому признаку и не нуждается в повторном использовании интерфейса.

Лучший способ ответить на такие вопросы, как эксперимент - попробовать и посмотреть.

+1

+1 только для «почему бы вам не попробовать, прежде чем спрашивать?» точка - что-то хорошее, что стоит переводить более регулярно. – delfuego

0
  1. Нет, интерфейсы должны быть явно реализованы.
  2. Интерфейсы, реализованные базовыми классами, являются расширениями, всегда реализуемыми производными классами.
+0

В качестве следствия абстрактный класс, реализующий интерфейс, может отложить реализацию к конкретному подклассу: http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html – trashgod

Смежные вопросы