php中extends与implements

PHP 类是单继承,也就是不支持多继承,当一个类需要多个类的功能时,继承就无能为力了,为此 PHP 引入了类的接口技术。

接口的使用使用implements关键字,而对抽象类使用的是extends继承关键字。

在接口中只能定义常量和方法,不能实现方法,const定义常量,functionUser();不能使用pubilc

$a ="a"与 pubilc static$a

="a";

//抽象类

 

abstract class Father {

function name() {

echo "name...
";

}

abstract function name2();

public $n="n1";

public static $n2="n2";

const n3="n3";

}

class Data extends Father {

function name2() {

echo "name2 of Data...
";

}

}

$v=new Data();

echo $v->var1."
";

echo Father::$n2."
";

echo Father::n3."
";

//实现接口

interface User{

function getDiscount();

function getUserType();

}

//VIP用户 接口实现

class VipUser implements User{

private $discount = 0.5;

function getDiscount() {

return $this->discount;

}

function getUserType() {

return "VIP用户";

}

}

class Goods{

//public $price="45";        此处接口定义中不能包含成员变量

//public static $price="45"; 此处接口定义中不能包含静态变量

//

const price = 45;

public $vc;

//定义 User 接口类型参数,这时并不知道是什么用户

function run(User $vc){

$this->vc = $vc;

$discount = $this->vc->getDiscount();

$usertype = $this->vc->getUserType();

echo $usertype."商品价格:".self::price*$discount;

}

}

$display = new Goods();

$display ->run(new VipUser); //可以是更多其他用户类型

?>

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

extends 是继承某个类 
继承之后可以使用父类的方法 
也可以重写父类的方法

implements 是实现多个接口 
接口的方法一般为空的 
必须重写才能使用

extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 
比如 
class A extends B implements C,D,E

extends 继承类implements 实现接口

类和接口是不同的。类里是有程序实现的;而接口无程序实现,只可以预定义方法 extends 继承类
implements 实现接口
Java也提供继承机制﹐但还另外提供一个叫interface的概念。由于Java的继承机制只能提供单一继承(就是只能继承一种父类别)﹐所以就以 Java的interface来代替C++的多重继承。interface就是一种介面﹐规定欲沟通的两物件﹐其通讯该有的规范有哪些。如以Java程式语言的角度来看﹐Java的interface则表示:一些函数或资料成员﹐为另一些属于不同类别的物件所需共同拥有﹐则将这些函数与资料成员﹐定义在一个interface中﹐然后让所有不同类别的Java物件可以共同操作使用之。

   所以﹐对于Java的继承与interface﹐我们总结如下:

1.Java的class只能继承一个父类别(用extends关键字)﹐但可以拥有(或称实作)许多interface(用implements关键字)。 
Q5.1 extends和implements有什么不同?
答:对于class而言,extends用于(单)继承一个类(class),而implements用于实现
一个接口(interf
ace)。
interface的引入是为了部分地提供多继承的功能。
在interface中只需声明方法头,而将方法体留给实现的class来做。
这些实现的class的实例完全可以当作interface的实例来对待。
在interface之间也可以声明为extends(多继承)的关系。
注意一个interface可以extends多个其他interface。

------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、extends 是继承某个类 
继承之后可以使用父类的方法 
也可以重写父类的方法;

2、implements 是实现多个接口 
接口的方法一般为空的 
必须重写才能使用;

 

[在interface之间也可以声明为extends(多继承)的关系。注意一个interface可以extends多个其他interface。]

 

extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 
比如 
class A extends B implements C,D,E

extends 继承类implements 实现接口

类和接口是不同的。类里是有方法的实现;而接口无方法的实现,只可以预定义方法(方法头) extends 继承类

----------------------------------------------------------------------------------------------
implements 实现接口
interface的引入是为了部分地提供多继承的功能。

类通过使用implements来实现接口。这里要注意的是一个类可以使用 implements实现多个接口,但是类实现接口必须要实现其中的抽象方法。
在interface中只需声明方法头,而将方法体留给实现接口的类来做。
这些实现的class的实例完全可以当作interface的实例来对待。

-----------------------------------------------------------------------------------------------

Java也提供继承机制﹐但还另外提供一个叫interface的概念。由于Java的继承机制只能提供单一继承(就是只能继承一种父类别)﹐所以就以 Java的interface来代替C++的多重继承。interface就是一种介面﹐规定欲沟通的两物件﹐其通讯该有的规范有哪些。如以Java程式语言的角度来看﹐Java的interface则表示:一些函数或资料成员﹐为另一些属于不同类别的物件所需共同拥有﹐则将这些函数与资料成员﹐定义在一个interface中﹐然后让所有不同类别的Java物件可以共同操作使用之。

   所以﹐对于Java的继承与interface﹐我们总结如下:

1.Java的class只能继承一个父类别(用extends关键字)﹐但可以拥有(或称实作)许多interface(用implements关键字)。 
Q5.1 extends和implements有什么不同?
答:对于class而言,extends用于(单)继承一个类(class),而implements用于实现
一个接口(interf
ace)。

 

上一篇:java – 如何使用EasyMock模拟从抽象类继承的方法?


下一篇:java – 文本中有一些特殊含义“<? >”?