Какова цель интерфейса при написании класса?
Вот пример, который я видел в Интернете.
<?php interface Chargeable { public function getPrice(); } class Employee implements Chargeable { protected $price; public function getPrice() { return $this->price; } } $product = new Employee(); ?>
вот один из способов узнать, как я узнал о
представьте себе этот сценарий
abstract class Plane { public function openDoors(); } interface Fliers { public function fly(); }
теперь позволяет использовать их
class Boeing747 extends Plane implements Fliers { public function fly() { // some stuff } public function openDoors() { // do something } }
а также
class Tweety implements Fliers{ public function fly() { // some stuff } }
Boeing747 – это самолет, который может летать, а Tweety – птица, чем летать, но не имеет смысла «openDoors». Дело в том, что интерфейсы могут быть реализованы различными типами объектов, но классы не могут. как вы видите, Boeing747 и Tweety не имеют ничего общего, но оба могут летать.
Интерфейс представляет собой концепцию в объектно-ориентированном программировании, которая позволяет полиморфизм. В принципе, интерфейс похож на контракт, который тем, что классы, которые его реализуют, соглашаются предоставить определенную функциональность, чтобы их можно было использовать так же, как и другие классы, использующие интерфейс
В вашем примере показаны классы, гарантирующие наличие метода getPrice. Затем вы можете написать код, который использует объекты, которые имеют этот метод, не беспокоясь о том, какой класс он есть.
Интерфейсы позволяют отделять интерфейс от реализации. Это удобно, если вы хотите иметь ортогональность в своем коде между прочим.
В основном вы сможете создавать функции, которые принимают Chargeable
и могут передавать любой объект там, пока он реализует Chargeable
. Это позволяет вам быть гибким в будущем, если вам нужно изменить класс Employee
. Также он позволяет вашему методу принимать любой объект, который «платный».
В языках с множественным наследованием вместо интерфейсов у вас есть абстрактные классы. В PHP нет множественного наследования, поэтому у вас есть интерфейсы. Один класс может реализовывать различные интерфейсы. Единственный момент – гарантировать, что ваш класс имеет определенный набор методов.
Я изо всех сил пытаюсь понять это в данный момент (и я думаю, что я читаю ту же книгу, что и OP …).
Мне кажется, что интерфейсы просто обеспечивают «контрактное» обязательство для классов, реализующих интерфейс для реализации функций / свойств, которые появляются в интерфейсе. Тем не менее, не так ли, что классы / объекты, реализующие интерфейс, могут сделать это уникальным образом, поскольку реализация не определена?
Существует ли фактическое наследование?
Первоначальные структуры интерфейсов обеспечивают интерфейс для классов, реализованных для общения с внешним миром. Простым примером может служить телевидение. Телевидение – это класс, а кнопки на нем – интерфейсы.
использование интерфейсов:
1-Java не поддерживает множественное наследование. Если мы хотим добавить два разных метода из разных классов, мы не можем (расширение ClassA, ClassB) невозможно реализовать A, B без проблем.
2-Другой совет – это безопасность и гибкость. Пример может быть более конкретным, если мы хотим, чтобы некоторые из методов класса были недоступны, как мы можем это сделать? полиморфизм + интерфейс, мы можем это сделать, если мы не хотим, чтобы методы ходьбы и коры были недоступны
abstract class Animal { String name; int age; public Animal(String name, int age) { super(); this.name = name; this.age = age; } } class Dog extends Animal implements Run { public Dog(String name, int age) { super(name, age); // TODO Auto-generated constructor stub } @Override public void run() { // TODO Auto-generated method stub } public void bark() { } } class Cat extends Animal implements Climb { public Cat(String name, int age) { super(name, age); } @Override public void climb() { // TODO Auto-generated method stub } public void walk() { } } public class Main { public static void main(String[] args) { // if we want that some of methods of the class are not reachable how // can we do that? // polymorphism + interface we can do that // for example if we do not want walk and bark methods should be // unreachable Climb cat = new Cat("boncuk", 5); Run dog = new Dog("karabas", 7); // see we cannot reach the method walk() or bark() dog.walk(); // will give an error. since there is no such a method in the interface. } }} enter code here
позвольте мне привести вам пример, чтобы понять размытие этого типа классов
public interface transport{ public double getSpeed(){return(0/*the speed*/);} public void setSpeed(){return(0/*the speed*/);} } class car extend transport{ //implementation of transport interface public double getSpeed(){return(speed/*the speed*/);} public void setSpeed(){speed=250;} } class train extend transport{ //implementation of transport interface .... } class plane extend transport{ //implementation of transport interface .... }
поэтому класс интерфейса является общей концепцией.