抽象类
抽象类
abstract;
使用的原因:
1,在开发中,我们可以有一种类,是其他类的父类,本身不要实例化
是用于子类的一种规范,让子类来继承,达到代码复用,
语法:abstract class 类名{
//方法
//属性
}
2.用abstract 来修饰,类是抽象类,方法是抽象方法(不能有方法体);
抽象类不一定要有抽象方法;
<?php
abstract class abc{
public $name;
protected $age;
abstract function cry();
}
class a extends abc{
public function cry(){
echo "叫声";
}
}
$p1=new a();
$p1->cry();
?>
子类继承了一个抽象类,那么子类是抽象类或者子类中重写父类中抽象方法;
接口:
接口就是给出一些没有实现的方法,封装在一起,当某个类要用的时候
在根据具体情况把接口中的方法写出来;
<?php
//使用程序模拟现实的接口
//定义规范(方法/属性)
interface iusb{
public function start();
public function stop();
}
//编写类,让它去实现接口
//1 当一个类实现某个接口,则要求该类必须实现这个接口的所有方法
class camera implements iusb{
public function start(){
echo "相机工作<br/>";
}
public function stop(){
echo "相机停止工作";
}
}
$cameral=new camera();
$cameral->start();
$cameral->stop();
?>
语法:
interface 接口名{
//属性
//方法
}
接口中的方法不能有方法体;
实现接口:
class 类名 implements 接口名1,接口名2{
}
体现了编程中中我们希望,高内聚低偶合;
接口的难点在于不知道什么时候使用它:
1.定规范
2.定下规范,让别的程序员实现;
3.当多个类它们之间是平级的,这些类要实现某功能,但方式不同
接口细节:
1.接口不能去实例化;
2.接口中的所有方法都不能有方法体;
3.一个类可以有多个接口,用逗号隔开;
class aaa implements 接口1,接口2{
}
4,接口中可以有属性,但必须是常量,默认是public
常量是放在内存中的常量区的,没有和某个对象关联;
5.接口的方法是public ,不能是protected或者不能是private;
6.接口aa可以继承多个别的接口;类就必须实现接口aa中的所有方法和aa所继承的
接口中的方法;

继承和实现接口的比较
1 实现接口是对单一继承的补充
2 可以不破坏类的层级关系,而对类进行功能扩展;
final关键字:
1.使某个类不被其它的类来继承
<?php
final class a{
//不能被继承
}
class b extends a{
//报错
}
?>
2 类可以被继承 但使某个方法不被重写;
<?php
class a{
final public function getrate($salary){
return $salary*0.08;
}
}
class b extends a{
public function getrate($sal){
return $salary*0.01;
}//错误
}
$b=new b();
echo $b->getrate(100);
?>
3,final 不能去修饰属性(变量);
const 常量:
1,不希望一个成员变量被修改;
class A{
const 常量名=赋初值
}
interface 接口名{
const 常量名=赋初值;
}
常量是public类型
访问: 类名::常量 或者 接口名::常量,在类内部;self::常量;
2,定义的时候,必须给初值;
浙公网安备 33010602011771号