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

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是单继承,能不能实现多继承?
“可以通过接口实现多继承?”
不能实现多继承







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值