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)。