抽象方法和接口

原创 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(){
        //具体实现的内容
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

讲述Java中抽象类,抽象方法和接口的各种用法。
  • ccpat
  • ccpat
  • 2015年03月26日 20:50
  • 2345

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

1.接口 (1)接口定义前默认修饰符为public。 (2)接口中变量默认修饰符为public static final。 (3)接口中方法默认的访问权限为public。 实例 public int...
  • hellorichen
  • hellorichen
  • 2016年09月13日 14:55
  • 2698

抽象类、接口的区别 和 抽象类可以不实现接口的全部方法

抽象类和接口的区别   抽象类里面可以有非抽象的方法,接口里只能有抽象方法。   抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号。    抽象类(abstract...
  • taoshengyijiuzt
  • taoshengyijiuzt
  • 2015年06月16日 20:58
  • 1598

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

本章目标: 1
  • forfan06
  • forfan06
  • 2014年08月26日 15:01
  • 1790

JAVA知识点梳理 抽象方法 接口 多态 内部类 异常处理

抽象方法一定存在于抽象类中,子类如果想要继承抽象类,必须要实现抽象类中定义的全部抽象方法,如果只实现抽象类中的部分抽象方法,则这个子类仍然是抽象类 1.      当一个抽象类中的方...
  • zousy202
  • zousy202
  • 2016年09月13日 23:35
  • 110

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

//抽象方法------------------------------ abstract Person.class.php
  • u014804506
  • u014804506
  • 2017年01月30日 15:21
  • 101

黑马程序员-我的入学笔记5-类的补充(抽象方法和接口)

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------   看了抽象方法和接口的基础,只...
  • u011770456
  • u011770456
  • 2013年09月19日 03:38
  • 418

java中的实现接口和含有抽象方法的枚举类

含有抽象方法的枚举类型: public enum Operator  { /*PLUS , MINUS , TIMES , DIVIDE; double eval(double x , dou...
  • rylq56m9
  • rylq56m9
  • 2013年07月23日 19:44
  • 580

关于抽象方法与接口

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

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

JavaSE8.0出来也蛮久了 网上也蛮多案例和教程 但大多数都写的比较复杂  而且更新的新特性也不是很齐全。 本案例是根据甲骨文官方的Demo进行修改的 授人以鱼不如授人以渔,学习方式其...
  • austral
  • austral
  • 2016年11月29日 23:51
  • 934
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象方法和接口
举报原因:
原因补充:

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