php中接口、抽象类、Final、Static例子

1. 接口
(1)对接口的使用是通过关键字implements
(2)接口不能定义成员变量(包括类静态变量),能定义常量
(3)子类必须实现接口定义的所有方法
(4)接口只能定义不能实现该方法
(5)接口没有构造函数
(6)接口中的方法和实现它的类默认都是public类型的
2. 抽象类
(1)对抽象类的使用是通过关键字extends
(2)不能被实例化,可以定义子类必须实现的方法
(3)子类必须定义父类中的所有抽象方法,这些方法的访问控制必须和父类中一样(或者更为宽松)
(4)如一个类中有一个抽象方法,则该类必须定义为抽象类
(5)抽象类可以有构造函数
(6)抽象类中的方法可以使用private,protected,public来修饰。
(7)一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。
3. Final类/方法
(1)final类不能被继承
(2)final方法不能被重写
4. Static类/方法
(1)可以不实例化类而直接访问
(2)静态属性不可以由对象通过->操作符来访问,用::方式调用

例子

<?php
# 接口
interface Human{
    const TEST_CONST = "test const"; // 定义常量
    // public $v; // error,不能定义变量
    // static $count; // error,不能定义变量
    public function speak();
    public function walk();
    public function run();
}
    
# 抽象类
abstract class Father implements Human{
    
    public function __construct(){
        echo "father init n";
    }
    
    abstract public function walk(); // 抽象方法
    
    public function speak(){
        echo "father speak skill n";
    }
    
    public function run(){
        echo "father run skill n";
    }
}
    
# 非抽象类
class Mother implements Human{
    
    public function __construct(){
        echo "mother init n";
    }
    
    # 这里必须实现walk方法
    public function walk(){
        echo "mother walk skill n";
    }
    
    public function speak(){
        echo "mother speak skill n";
    }
    
    public function run(){
        echo "mother run skill n";
    }
}
    
class Son extends Father{
    
    public function walk(){
        echo "son walk skill. n";
    }
    
    public function speak($name = ''){
        echo "son: ". $name ." speak skill. n";
    }
    
    # 访问控制必须和父类中一样(或者更为宽松)
    protected function sport(){
        echo "son sport skill. n";
    }
    
    final public function notTeach(){
        echo 'son has not to teach skill';
    }
}
    
class Daughter extends Mother{
    
    public function run($name = ''){
        echo "daughter run skill. n";
    }
    
}
    
final class GrandChild extends Son{
        
    # 访问控制必须和父类中一样(或者更为宽松)
    public function sport(){
        echo "GrandChild sport skill. n";
    }
    
    # Cannot override final method Son::notTeach()
    // public function notTeach(){} // error
}
    
#  Class Orphan may not inherit from final class (GrandChild)
// class Orphan extends GrandChild{}  // error
    
$son = new Son();
$son->speak("Suly");
    
$daughter = new Daughter();
$daughter->run('Lily');
    
$grandChild = new GrandChild();
$grandChild->sport();

抽象类和接口的区别

1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以通过关键字extends继承。
2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。(另JAVA接口中的成员变量都要声明为public static final类型)
3、接口没有构造函数,抽象类可以有构造函数。

  4、接口中的方法默认都是public类型的,而抽象类中的方法可以使用private,protected,public来修饰。
5、一个类可以同时实现多个接口,但一个类只能继承于一个抽象类。

  抽象类还是接口。
如果要创建一个模型,这个模型将由一些紧密相关的对象采用,就可以使用抽象类。如果要创建将由一些不相关对象采用的功能,就使用接口。
如果必须从多个来源继承行为,就使用接口。
如果知道所有类都会共享一个公共的行为实现,就使用抽象类,并在其中实现该行为。

时间: 2024-09-28 19:43:41

php中接口、抽象类、Final、Static例子的相关文章

Java中接口和抽象类的区别与相同之处

  这篇文章主要介绍了Java中接口和抽象类的区别与相同之处,本文讲解了抽象类的概念.接口的概念.接口和抽象类的区别与联系等内容,需要的朋友可以参考下 1. 抽象类: (1).概念:抽象类是对一种事物的抽象,即对类抽..抽象类是对整个类整体进行抽象,包括属性.行为.Java抽象类和Java接口一样,都用来声明一个新的类型.并且作为一个类型的等级结构的起点. (2).格式: 代码如下: public abstract class abstractDemo{ /**属性*/ private Stri

设计-为什么在抽象接口中定义抽象类

问题描述 为什么在抽象接口中定义抽象类 在此处定义了一个抽象接口里面定义了抽象方法 public abstract interface IManagerRoot{ public abstract List<?> getList(); } 定义了一个抽象接口继承抽象接口 public abstract interface IManager extends IManagerRoot{} 这个是抽象接口的实现类 public abstract class ManagerRootImpl implem

php类中的$this,static,final,const,self这几个关键字使用方法_php实例

本篇文章主要分项了一下关于php类中的$this,static,final,const,self这几个关键字使用方法. $this $this表示当前实例,在类的内部方法访问未声明为const及static的属性时,使用$this->value='phpernote';的形式.常见用法如: $this->属性 $this->方法 举例如下: <?php class MyClass{ private $name; public function __construct($name){

Java final static abstract关键字概述_java

一,抽象类:abstract 1,只要有一个或一个以上抽象方法的类,必须用abstract声明为抽象类; 2,抽象类中可以有具体的实现方法; 3,抽象类中可以没有抽象方法; 4,抽象类中的抽象方法必须被它的子类实现,如果子类没有实现,则该子类继续为抽象类 5,抽象类不能被实例化,但可以由抽象父类指向的子类实例来调用抽象父类中的具体实现方法;通常作为一种默认行为; 6,要使用抽象类中的方法,必须有一个子类继承于这个抽象类,并实现抽象类中的抽象方法,通过子类的实例去调用; 二,接口:interfac

C#中接口多重继承的注意事项

经常,一个类会实现多个接口,比如用户的一个控件继承自"IEdit"和"ICombo",每个接口无疑都有一个Paint方法来供子类实现如何画他们,但是多重继承就会出现问题,默认情况下,C#止允许实现Paint方法.现在有一个比较钻牛角尖的问题,如何在派生的类里面实现这两个接口的相同名称的方法呢? 通过试验,翻阅MSDN,我总结了这么几条规律: 本文可参考 MSDN 配合理解 1.要么只实现一个方法,否则函数重明,就会存在二义性 2.如果确实想两个方法都实现,必须在接口

java中举个实现抽象类抽象方法的例子瞧瞧,谢谢

问题描述 java中举个实现抽象类抽象方法的例子瞧瞧,谢谢 java中举个实现抽象类抽象方法的例子瞧瞧, 谢谢 我知道抽象类既可以有抽象方法也可以有非抽象方法的 解决方案 大致是这样子的,抽象类ClassABase里面既有抽象方法,又有非抽象方法,,抽象方法需要在子类中实现. ///// 抽象类 ClassABase.java public abstract class ClassABase { int a = 2; public abstract void output(); public v

PHP面向对象开发之类中接口的应用(interface、implements)

类中接口的应用 1.关键字:interface 2.关键字:implements 1.接口的介绍与创建 接口:一种成员属性全部为抽象或常量的特殊抽象类. 规则: 1.类中全部为抽象方法. 2.抽象方法钱不用加abstract. 3.接口抽象方法属性为public. 4.成员属性必须为常量. 格式:  代码如下 复制代码 interface demo { const NAME = "常量对象属性"; function fun1(); function fun2(); //抽象方法. }

分享JavaScript与Java中MD5使用两个例子_javascript技巧

在网上查了一下,在网上收集了Java与JavaScript中使用的两个例子,试验过,分享下.1.Java: package org.bearfly.test.md5; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Utils { public static

php 面向对象中接口 与多态性的用法

php教程 面向对象中接口 与多态性的用法 ,接口的方法名是show,继承接口的类中必须有show这个方法,要不然就会报错.也就是说接口的方法是假的,真正起作用的是在继承的类中的方法,就是因为这一点,所以我觉得,接口根php的抽象类有点像. <?php interface face1 {  const param = 'test';  public function show(); } class test implements face1 {  public function show()  

java中接口没有构造方法那子类怎么访问他的数据

问题描述 java中接口没有构造方法那子类怎么访问他的数据 感觉跟以往学过的知识冲突了?哪位大神能伸出援手解答下?这个问题困扰我好久了,希望走过路过的不要错过哈! 解决方案 接口有什么数据?接口就是一个定义,不存任何数据. 解决方案二: 接口中没有任何函数,接口不是类,不能构造一个接口.只能构造一个实现了这个接口的函数. 解决方案三: 接口就是公共方法的集合,只有公有常量和抽象方法,数据是类的属性,只有类才可以定义私有成员变量的. 解决方案四: 接口,不能实例化,没有构造方法 解决方案五: 接口