OOP面向对象学习笔记(3)---接口与抽象类

一:接口

1:问题:人会吃饭,动物也会吃饭,有些植物也可以吃饭(比如猪笼草),但是吃这个方法对于不同的生命是不同的。

        动物张嘴咀嚼,植物直接包裹融化等等。吃这个方法不能作为父类中的方法被统一继承,因为不同的生命,吃的方法不一样。

2:接口的定义:把不同类的共同行为进行定义,然后在不同的类里面实现不同的功能。

3:特性:一旦类实现了某个接口,就必须实现接口定义的方法(同时也说明了接口中的方法只需要定义,不需要实现。)

            一个接口可以继承另一个接口,用extends。

4:总之,接口就是为不同的类定义的规范。

 1 <?php
 2 //定义接口Eat
 3 interface Eat {
 4     public function eat($food);
 5 }
 6 //人类实现这个接口
 7 class Human implements Eat {
 8     public function eat($food) {
 9         echo "human is eating " . $food . "<br>";
10     }
11 }
12 //植物实现这个接口
13 class Plant implements Eat {
14     public function eat($food) {
15         echo "plant is eating " . $food . "<br>";
16     }
17 }
18 $human = new Human ();
19 $plant = new Plant ();
20 $human->eat ( "banana" ); //human is eating banana
21 $plant->eat ( "apple" );  //plant is eating banana

二:抽象类

1:问题:接口中的方法全部不实现,类中的方法一般全部实现。

             有没有一种形态是介于接口和类之间的呢?

2:回答:有这样一种形态-抽象类。抽象类中的方法有的实现,有的不实现,等待子类去实现。

3:实例:人与植物吃东西的方法不同,但是呼吸时相同的,所以可以定义一个抽象类。实现呼吸方法,吃东西方法不实现。

 1 <?php
 2 //抽象类和抽象方法都用abstract修饰
 3 abstract class Common {
 4     public abstract function eat();
 5     public function breathe() {
 6         echo "we are breathing...<br>";
 7     }
 8 }
 9 
10 class Human extends Common{
11     public function eat(){
12         echo "human is eating...<br>";
13     }
14 }
15 class Plant extends Common{
16     public function eat(){
17         echo "plant is eating...<br>";
18     }
19 }
20 $human=new Human();
21 $plant=new Plant();
22 $human->eat();      //human is eating...
23 $human->breathe();  //we are breathing...
24 $plant->eat();      //plant is eating...
25 $plant->breathe();  //we are breathing...

三:面向对象的三大特性

面向对象的三大特性:继承、封装、多态。

继承:比如子类继承父类,子接口继承父接口等。可以提高代码的复用性,简洁代码,提高效率。

封装:private、protected等修饰的属性和方法。可以很好地隐藏不该让外部看到的关键数据。

多态:上面植物、人类对eat()的方法实现多种多样,这本身就是一种多态。

原文地址:https://www.cnblogs.com/bwcx/p/oop3.html