您的位置:首页 > 编程语言 > PHP开发

PHP中final类,抽象类,接口结构

2015-12-20 21:29 821 查看

final类

概念:在继承链上的末尾, 其下不能出现出现子类,也就是不能被继承

final类

格式如下,就是在类前面加一个final关键字
final class Goods {
public $goods_name;
public $goods_price;
}

final,并没有增加额外的功能!意义是,在语法上限制某个类不能被继承!从而保证数据的完整性!

final方法

final关键字还可以限制方法,表示该方法不能被重写
class Goods {
public $goods_name;
public $goods_price;
final public function in_C(){
return $this->goods_price;
}
}
class Book extends Goods{
public $anthor;
public $publisher;
public function in_C(){
return $this->author;
}
}


像上面写的那样就是会报错的

抽象类 abstract

抽象类:指的是包含抽象方法的类叫做抽象类,不能用于实例化对象,只能用户继承。
抽象类是不完整类因为包含不完整方法

不完整的方法,也叫抽象方法,指的是没有方法体的方法,称之为只有方法的声明,而没有方法的实现的方法称之为抽象方法。也就是不完整的方法!

abstract class Goods {
public $goods_name;
public $goods_price;
public function in_j(){}//这样是对的
public function in_C();  //这样是错误的
abstract public function in_C();//这样就是对的,如果类前不加关键字也是错的
//抽象类中可以没有不完整函数
}

注意:抽象类是可以包含其他任何正常的成员的,在此基础上,增加了内部的抽象方法!

(并不是抽象类中只能包含抽象方法)

也就是说只能被继承
abstract class Goods {
public $goods_name;
public $goods_price;
public function in_j(){}//这样是对的
public function in_C();  //这样是错误的
abstract public function in_C();//这样就是对的,如果类前不加关键字也是错的
//抽象类中可以没有不完整函数
}
class Book extends Goods{
public $anthor;
public $publisher;
public function in_C(){
return $this->author;
}
}

使用意义

可见,抽象类,可以规定其非抽象子类,必须要存在的相应成员方法!

可以规定,子类中都必须存在,但是可以不同的方法!

abstract class Goods {
public $goods_name;
public $goods_price;
public function in_j(){}//这样是对的
//public function in_C();  //这样是错误的
abstract public function in_C();//这样就是对的,如果类前不加关键字也是错的
//抽象类中可以没有不完整函数
}
final class Book extends Goods{
public $anthor;
public $publisher;
public function in_C(){
return $this->author;
}
}
final class Phone extends Goods{
public function in_C(){
return $this->goods_price;
}
}


几个概念:

抽象:abstract,不完整的意思!

实现:implement。将方法完整化!

接口结构,interface

接口指的是对象的公共方法。
也有一种结构技术,定义一个接口结构用于限制一个类(对象)应该具备的共有方法。
声明:关键字interface声明
interface i_Goods{
public function sayName();
public function sayPrice();
}

注意,接口内只能包含公共的抽象方法(不完整的方法)!

接口定义的函数不能有函数体,只能有函数名和参数列表

使用方法:
是定义一个类来实现接口内所定义的所有接口方法(公共方法)
abstract class Goods implements i_Goods{
public $goods_name;
public $goods_price;
}
interface i_Goods{
public function sayName();
public function sayPrice();
}

abstract class Goods implements i_Goods{ public $goods_name; public $goods_price; }
class Book implements i_Goods{
public $anthor;
public $publisher;
}


实现接口的类,有两种选择,1是抽象类实现(不能缺少)2、实现接口方法

抽象类和借口的区别:

1、抽象类与普通类之间的关系是继承
普通类继承了抽象类既可以得到抽象类的常规成员,又可以实现抽象方法(不一定是public)
2、抽象类与普通类之间是实现的关系
普通类实现了接口,只是将其没有实现的公共方法实现。
3、接口值用于定义抽象方法,而抽象类什么都可以

多实现

abstract class Goods implements i_Goods,i_Good{
public $goods_name;
public $goods_price;
}


接口也可以定义常量
interface i_Goods{
const PAI = 3.4;
public function sayName();
public function sayPrice();
}

abstract class Goods implements i_Goods{ public $goods_name; public $goods_price; }
class Book implements i_Goods{
public $anthor;
public $publisher;
public function sayPrice(){}
public function sayName(){}
}

echo Book::PAI;


辨析:
1、接口是不是类,
接口不是类,接口是限制类的一种结构,是独立的,可以理解为“接口定义的所有的方法都是公共的不完整(抽象)方法,而且没有其他成员的抽象类”,但是和类完全是两个概念
2、PHP是单继承,能不能实现多继承?
“可以通过接口实现多继承?”
不能实现多继承

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: