抽象类和接口

Posted chengzi-he

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象类和接口相关的知识,希望对你有一定的参考价值。

抽象类:
  1.抽象类不能实例化对象
  2.抽象类存在的目的是为了让子类继承
  3.抽象类的定义和普通类定义一样,只不过前面需要加一个关键字,abstract
  4.抽象类里面一般都要有抽象方法(可以没有),抽象方法是用来让子类实现的,而且子类必须实现,不实现就会报一个致命错误
  5.抽象方法必须public或者protected,要不然子类没法继承实现
  6.抽象方法如果有参数,参数有默认值,那么实现该方法的时候参数和默认值也要有
  7.抽象类可以继承抽象类。子类在实现的时候所有的抽象方法都要实现

<?php
abstract class Shengwu
{
    abstract public function run();
}

abstract class Person extends Shengwu
{

    // 强制要求子类定义这些方法,且不能定义具体功能 注意没有大括号{}
    abstract public function say($name = php);

    // 普通方法(非抽象方法)
    public function eat()
    {
        echo "我吃了一个苹果
";
    }

}

class Man extends Person
{
    public function run()
    {
        echo 我可以奔跑;
    }

    public function say($name = php)
    {
        echo 我的名字是 . $name;
    }
}

抽象类的使用:举一个简单的例子,数据库有很多种,像mysql,oracle,sqlserver等,对这些数据库的连接是不一样的,但是对数据库的查询,删除,更新等语法都是一样的,所以我们可以把一些公共的方法放到一块,写在一个类中,把这个类定义成抽象类,当然这个类是不能实例化对象的,因为仅依靠抽象类里面的方法是不能完成整个数据库操作的,不同的东西由各个子类进行实现。

 

接口:

  1.接口中的方法都是抽象方法,所以abstruct可以省略不写
  2.接口的声明是 interface 接口的实现是 implements
  3.接口中的方法必须是public
  4.接口只能规定方法,不能写属性,(接口中可以写常量,但是不建议写)
  5.一个类可以实现多个接口,接口名称之间用逗号隔开
  6.一个类可以先继承父类,然后再实现接口
  7.接口可以继承接口,但是里面的方法都要实现


<?php
interface Eat
{
    public function eatMianbao();
}

interface Run
{
    function fast();
}

interface Jump extends Run
{
    public function go();
}

class Animal
{

}

class Person extends Animal implements Eat, Jump
{
    public function eatMianbao()
    {
        echo 我在吃面包;
    }

    public function go()
    {
        echo 我会跳远;
    }

    public function fast()
    {
        echo 我跑的很快;
    }
}

接口的使用:接口本质是一种规范,在面向接口的开发中,领导会提前把接口写好,然后你来实现这个方法,具体的代码量和代码逻辑,使用接口的人是不需要知道,也不会关心的。















以上是关于抽象类和接口的主要内容,如果未能解决你的问题,请参考以下文章

聊聊抽象类和接口

抽象类和接口的异同

抽象类和接口在一起?

java 抽象类和接口的差别

抽象类和接口

Java学习笔记—抽象类和接口