Назначение интерфейса в классах
Какова цель интерфейса при написании класса?
Вот пример, который я видел в Интернете.
<?php
interface Chargeable {
public function getPrice();
}
class Employee implements Chargeable {
protected $price;
public function getPrice() {
return $this->price;
}
}
$product = new Employee();
?>
Ответы
Ответ 1
вот один из способов узнать, как я узнал о
представить этот сценарий
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 не имеют ничего общего, но оба могут летать.
Ответ 2
Интерфейс - это концепция в объектно-ориентированном программировании, которая позволяет полиморфизм. В принципе, интерфейс похож на контракт, который заключается в том, что классы, которые его реализуют, соглашаются предоставить определенную функциональность, чтобы их можно было использовать так же, как и другие классы, использующие интерфейс
В этом примере показаны классы, гарантирующие наличие метода getPrice. Затем вы можете написать код, который использует объекты, которые имеют этот метод, не беспокоясь о том, что это за класс.
Ответ 3
Интерфейсы позволяют отделять интерфейс от реализации. Это удобно, если вы хотите иметь ортогональность в своем коде между прочим.
В принципе, вы сможете создавать функции, которые принимают Chargeable
, и иметь возможность передавать любой объект там, пока он реализует Chargeable
. Это позволяет вам быть гибкими в будущем, если вам нужно изменить класс Employee
. Также он позволяет вашему методу принимать любой объект, который "платный".
Ответ 4
В языках с множественным наследованием вместо интерфейсов у вас есть абстрактные классы. В PHP нет множественного наследования, поэтому у вас есть интерфейсы. Один класс может реализовывать различные интерфейсы. Единственный момент - гарантировать, что ваш класс имеет определенный набор методов.
Ответ 5
Я изо всех сил пытаюсь понять это в данный момент (и я думаю, что я читаю ту же книгу, что и OP...).
Мне кажется, что интерфейсы просто применяют "контрактное" обязательство к классам, реализующим интерфейс для реализации функций/свойств, которые появляются в интерфейсе. Тем не менее, не так ли, что классы/объекты, реализующие интерфейс, могут сделать это уникальным образом, поскольку реализация не определена?
Не существует ли фактического наследования?
Ответ 6
В первую очередь, структуры интерфейсов обеспечивают интерфейс для классов, реализованных для общения с внешним миром. Простым примером может служить телевидение. Телевидение - это класс, а кнопки на нем - интерфейсы.
Использование интерфейсов:
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
Ответ 7
Позвольте мне привести вам пример, чтобы понять размытие этого типа классов
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
....
}
поэтому класс интерфейса является общей концепцией.