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()的方法实现多种多样,这本身就是一种多态。