有两个问题

有两个问题

  1. 为什么implements实现接口,会继承接口里的方法呢,那这和直接继承有什么区别?

    这个问题是在问答区看到的,也是困惑我的,

  2. 关于抽象类实现接口,见下方代码,需要添加public关键词吗

  3. abstract class MyAbsClass implements MyInterface
    {
    	abstract public function func1();
    	abstract public function func2();
    }

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好,接口用关键字 interface 来声明。抽象类提供了具体实现的标准,而接口则是纯粹的模版。接口只定义功能,而不包含实现的内容。

interface 是完全抽象的,只能声明方法,而且只能声明 public 的方法,不能声明 private 及 protected 的方法,不能定义方法体,也不能声明实例变量 。然而, interface 却可以声明常量变量 。但将常量变量放在 interface 中违背了其作为接口的作用而存在的宗旨,也混淆了 interface 与类的不同价值。如果的确需要,可以将其放在相应的 abstract class 或 Class 中。

任何实现接口的类都要实现接口中所定义的所有方法,否则该类必须声明为 abstract 。

一个类可以在声明中使用 implements 关键字来实现某个接口。这么做之后,实现接口的具体过程和继承一个仅包含抽象方法的抽象类是一样的。一个类可以同时继承一个父类和实现任意多个接口。 extends 子句应该在 implements 子句之前。 PHP 只支持继承自一个父类,因此 extends 关键字后只能跟一个类名。

接口不可以实现另一个接口,但可以继承多个



interface 需要实现,要用 implements ,而 abstract class 需要继承,要用 extends 。

一个类可以实现多个 interface ,但一个类只能继承一个 abstract class 。

interface 强调特定功能的实现,而 abstract class 强调所属关系。

尽管 interface 实现类及 abstract class 的子类都必须要实现相应的抽象方法,但实现的形式不同。 interface 中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体 ) ,实现类必须要实现。

如果解决您的问题请采纳,祝学习愉快!

  • 消除bug 提问者 #1
    那abstract class MyAbsClass implements MyInterface { abstract public function func1(); abstract public function func2(); } 这里面可以不加public吗
    2019-05-05 19:53:40
  • guly 回复 提问者 消除bug #2
    你好,可以不加的,不加的情况下默认的是public(公共的、默认),祝学习愉快!
    2019-05-06 09:27:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师