При построении и интерфейсе, сколько классов может реализовать интерфейс?
Если ответ более одного, то как java знает, какие реализации использовать, когда вы совершаете вызов интерфейса (не вызывая реализацию напрямую)?Концепция интерфейса Java
ответ
Сколько классов может реализовать интерфейс?
Столько, сколько вам нужно.
Если ответ более одного, то как java знает, какие реализации использовать при выполнении вызова интерфейса (не вызывающего реализацию напрямую)?
Здесь приводится информация о late binding (также известная как динамическое связывание).
Допустим, что у вас есть интерфейс и классы, которые реализуют его как
interface Animal{
void makeSound();
}
class Cat implements Animal{
public void makeSound(){
System.out.println("mew");
}
}
class Dog implements Animal{
public void makeSound(){
System.out.println("woof");
}
}
У вас также есть код, как
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.makeSound();
a2.makeSound();
результат, который вы увидите в
mew
woof
Это происходит потому что тело/код метода .makeSound()
ищет (и вызывается) во время выполнения (не время компиляции). Это возможно, потому что каждый объект запоминает свой класс, поэтому объект, содержащий ссылку a1
, знает, что это экземпляр Cat
, а объект, хранящийся a2
, является экземпляром Dog
.
Короче говоря, когда вы делаете:
a1.makeSound();
- JVM принимает объект, который держит
a1
, - спрашивает, что объект о своем классе (в этом случае он будет узнать, что это экземпляр
Cat
class), - затем он обратится к этому классу (
Cat.class
файл) и ищет кодmakeSound()
(если такой метод не будет найден, он предположит, что он должен быть унаследован, он будет пытаться закрепите его в суперклассе) - , и когда он найдет этот метод, он выведет код из него.
Очень хорошо сказано. Спасибо. – MarkoRocko
@MarkoRocko Добро пожаловать. Я забыл добавить, что благодаря этому механизму мы имеем полиморфизм в Java. Также есть три исключения из динамической привязки, когда вы вызываете '.someMethod()'.Первое исключение, когда код задается во время компиляции и не выполняется динамически во время выполнения, - это когда метод является «final» (поскольку он не может быть переопределен, поэтому нет смысла в * поиске * его во время выполнения). Второй случай - когда метод 'private' (поскольку частные методы доступны только внутри класса, который объявляет и получает доступ к приватным методам из других классов, невозможно). – Pshemo
@MarkoRocko Третий случай, когда метод 'статический', потому что' reference.staticMethod() 'находится во время компиляции, изменен на' ReferenceType.staticMethod() '. – Pshemo
- 1. Концепция реализации интерфейса
- 2. Общая концепция Java Recursion
- 3. Концепция перегрузки Java
- 4. Концепция Java Array
- 5. концепция сериализации - java - C#
- 6. Концепция многопоточности Java
- 7. Java ООП концепция
- 8. Массивы концепция JAVA
- 9. Концепция overridding в Java
- 10. Концепция многопоточности в java
- 11. статическая концепция в java
- 12. Концепция многомерного массива Java
- 13. Java Многопоточность, концепция синхронизации
- 14. Basic Java Концепция
- 15. Java концепция оператор возврата
- 16. Концепция обработки исключений Java
- 17. Java генерик - стирание концепция
- 18. Концепция наследования концепции Java?
- 19. Концепция потока Java
- 20. Basic Java Initialize концепция
- 21. Java Subclasses Общая концепция
- 22. Что такое концепция java-итератора?
- 23. JAVA поддерживает платформу «Зависимая» концепция?
- 24. концепция метода поиска в Java
- 25. концепция последовательности точек в java
- 26. Java Heap Концепция Распределение запросов
- 27. Pivoting Концепция
- 28. Концепция ArrayBag
- 29. Почему концепция «ковариации» и «контравариантности» применима при реализации методов интерфейса?
- 30. Какая концепция дизайна для обновления пользовательского интерфейса async
Вы говорите Java, какую реализацию он должен использовать! – user2004685
Когда вы используете 'import', вы указываете Java, какую реализацию использовать. – MaxG
Неограниченное число может реализовать интерфейс и задавать конкретный тип при установке ссылки. –