purpose of interface in classes
编写类时接口的用途是什么?
这是我在网上看到的一个例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php interface Chargeable { public function getPrice(); } class Employee implements Chargeable { protected $price; public function getPrice() { return $this->price; } } $product = new Employee(); ?> |
以下是我如何学习和理解接口的方法之一。
想象一下这个场景:
1 2 3 4 5 6 7 8 | abstract class Plane { public function openDoors(); } interface Fliers { public function fly(); } |
现在让我们使用它们:
1 2 3 4 5 6 7 8 9 | class Boeing747 extends Plane implements Fliers { public function fly() { // some stuff } public function openDoors() { // do something } } |
还有:
1 2 3 4 5 | class Tweety implements Fliers{ public function fly() { // some stuff } } |
Boeing747是一架可以飞的飞机,Tweety是一只比可以飞的鸟,但是Tweety"打开门"是没有意义的。
重点是接口可以由不同类型的对象实现,但类不能实现。如你所见,Boeing747和Tweety没有任何共同点,除了两者都能飞。
接口是面向对象编程中启用多态性的概念。基本上,一个接口就像一个契约,通过这个契约,实现它的类同意提供某些功能,这样它们就可以像其他使用接口的类一样被使用。
您的示例显示的类保证它们具有可用的getPrice方法。然后,您可以编写代码,利用具有此方法的对象,而不必担心它是什么类型的类。
我现在正在努力摸索这个问题(我想我读的是同一本书,和《行动》…)。
在我看来,接口只是对实现接口的类执行"契约"义务,以实现出现在接口中的函数/属性。然而,实现接口的类/对象是否可以以一种独特的方式实现,因为没有定义实现?
没有实际的继承关系,是吗?
在具有多个继承而不是接口的语言中,您拥有抽象类。在PHP中没有多重继承,所以您有接口。一个类可以实现各种接口。唯一的一点是要确保类具有某些方法集。
接口允许您将接口与实现分离。当您希望在代码中具有正交性和其他特性时,这非常方便。
基本上,您将能够创建接受
首先,接口结构向为外部世界通信而实现的类提供接口。简单的例子就是电视。电视是一门课,它上面的按钮是接口。
使用界面高级:
1-java不支持多重继承。如果我们想从不同的类中添加两个不同的方法,我们就不能(扩展类A、类B)实现A、B没有问题。
2-另一个ADV是一个安全性和灵活性的例子,可以给出更具体的例子。如果我们希望类中的某些方法不可访问,我们如何才能做到这一点?多态性+接口我们可以做到如果我们不想走路,那么就不可能达到吠叫的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 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 |
让我举个例子来理解这种类型的类的模糊性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 .... } |
所以接口类是一般的概念。