Подтвердить что ты не робот

Назначение интерфейса в классах

Какова цель интерфейса при написании класса?

Вот пример, который я видел в Интернете.

<?php
interface Chargeable {
    public function getPrice();
}

class Employee implements Chargeable {
    protected $price;

    public function getPrice() {
        return $this->price;
    }
}

$product = new Employee();

?>
4b9b3361

Ответ 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 
....
}

поэтому класс интерфейса является общей концепцией.