抽象方法和接口

原创 2016年08月29日 22:46:19

抽象方法

在OPP语言中,一个类可以有一个或多个子类,而每个类都有至少一个公有方法作为外部代码访问它的接口。而抽象类是方便继承引入的。抽象类中的抽象方法就是没有方法体的方法,所谓没有方法体就是没有花括号以及其中的内容,而是在声明方法时直接在方法名后面加上分号结束。抽象方法用abstract关键字修饰。

abstract function fun1();
abstract function fun2();

只要声明类时有一个方法是抽象方法,那么这个类就是抽象类,抽象类也要使用abstract关键字来修饰。在抽象类中可以有不是抽象类的成员方法和成员属性,但是方法权限不能是private关键字修饰为私有的。

<?php 
abstract class Person{
    protected $name;
    protected $country;
    function __construct($name="",$country="china"){
        $this->name=$name;
        $this->country=$country;
    }
    abstract function say();//抽象方法
    abstract function eat();//抽象方法
}

抽象类不能被实例化,即创建不了对象,也就不能直接使用它。使用抽象类就包含继承关系,它是为子类定义公共接口,将它的操作(可能是部分也可能是全部)交给子类去实现。当子类继承抽象类以后,就必须把抽象类中的抽象方法按照子类自己的需要去实现。子类必须把父类中的抽象方法全部都实现,否则子类中还存在抽象方法,所以还是抽象类,也不能实例化对象。

//必须要实现父类所有抽象方法才能被实例化 
class chianeseMan extends Person{
    function say(){
        echo $this->name."是".$this->country."人,讲汉语<p/>";
    }
    function eat(){
        echo $this->name."用筷子吃饭<p/>";
    }
}
class Americans extends Person{
    function say(){
         echo $this->name."是".$this->country."人,讲英语<p/>";
    }
    function eat(){
        echo $this->name."用刀子和叉子吃饭<br/>";
    }
}
$chineseman=new chianeseMan("若见");
$americans=new Americans("alerx","美国");

$chineseman->say();
$chineseman->eat();
$americans->say();
$americans->eat();
//结果如下
若见是china人,讲汉语
若见用筷子吃饭
alerx是美国人,讲英语
alerx用刀子和叉子吃饭

接口技术

因为PHP只支持单继承,也就是说一个类只能继承一个父类。当声明的新类继承抽象类实现模板以后,他就不能有其他父类了,为了解决这个问题,PHP引入接口。接口是一种特殊的抽象类,抽象类是一种特殊的类,所以接口也是一种特殊的类。如果抽象类中的所有方法都是抽象方法,我们就可以换另外一种声明方式,使用接口技术。接口中声明的方法必须都是抽象方法,另外不能在接口中声明变量,只能使用const关键字声明为常量的成员属性,而且接口中所有成员都必须有public的访问权限。接口声明用interface关键字标识。

interface 接口名称{              //使用interface关键字声明接口
//常量名                  //接口中成员属性只能声明常量 不能是变量
//抽象方法    //接口中所有方法必须都是抽象方法 不能有非抽象方法的存在
}
 interface one{
    //默认都是public
     const CONST="CONST VALUE";
     //接口中所有方法都要求是抽象方法,所有不需要在方法前加abstract关键字标识
     function fun1();
     function fun2();
 }

如果需要使用接口中的成员,则需要通过子类去实现接口中的全部抽象方法,然后创建子类的对象去调用在子类中实现后的方法。但是通过类去继承接口使用implements关键字实现,如果需要使用抽象类去实现接口中的部分方法,也需要使用implements关键字实现。

//通过类去继承接口
class  For implement one {
    function fun1(){
        //具体实现的内容
    }
    function fun2(){
        //具体实现的内容
    }
}

//抽象类去实现接口
abstract class  Three implement one {
    function fun1(){
        //具体实现的内容
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于抽象方法与接口

抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。 抽象类不一定必须含有抽象方法,但是不符合抽象类设计模式。也可以拥有成员变量和普通的成员方法。 设计一个抽象类,为了继承而存在。   抽...

抽象方法、接口、继承、多态、图形计算器

//抽象方法------------------------------ abstract Person.class.php

14. JAVA 枚举(Enum、类集EnumMap&EnumSet 、实现接口、定义抽象方法) ----- 学习笔记

本章目标: 1

JAVA 8新特性 允许接口定义非抽象方法 快速入门案例

JavaSE8.0出来也蛮久了 网上也蛮多案例和教程 但大多数都写的比较复杂  而且更新的新特性也不是很齐全。 本案例是根据甲骨文官方的Demo进行修改的 授人以鱼不如授人以渔,学习方式其...
  • austral
  • austral
  • 2016年11月29日 23:51
  • 768

C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

1.C#类和接口的区别 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现! 在类中也有抽象类的定义,抽象类与接口的区别在于: 抽象类是一个不完全...

C#中 类 和 接口 虚方法 和 抽象方法 及 值类型 和 引用类型 的区别

C#中 类 和 接口 虚方法 和 抽象方法 及 值类型 和 引用类型 的区别 1.C#类和接口的区别 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负...

C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

C#类和接口、虚方法和抽象方法及值类型和引用类型的区别 1.C#类和接口的区别 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现...
  • zscmj
  • zscmj
  • 2011年09月09日 14:21
  • 333

Java中接口的定义与实现接口抽象方法

//如果抽象类的类体里的方法全部都是抽象方法,可以把这个类定义为接口 //换言之,类体里全部都是抽象方法,可以把这个类定义为接口. interface Runer//接口的定义,接口里只包含常量和抽象...
  • StellaAh
  • StellaAh
  • 2011年08月26日 11:41
  • 22382

抽象类、抽象方法、接口的区别及实现

一、抽象类、抽象方法 抽象方法:类的成员方法,只有声明,没有实现,把实现交给子类。 抽象类:含有抽象方法的类。 1.有抽象方法的类一定是抽象类,但抽象类里可以没有抽象方法(当然也...
  • aionbo
  • aionbo
  • 2016年10月17日 11:49
  • 564

Java抽象类和抽象方法、接口

一、抽象类、抽象方法1、抽象类抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和参数,没有方法体,也就是说抽象方法只需要声明而不需要实现。 1. 被abstract...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象方法和接口
举报原因:
原因补充:

(最多只允许输入30个字)