//什么是抽象类?
//从宏观的角度来说:
就是要实现某种内容 但是又含蓄的保留啦下来(没有真正的实现);
//从程序角度来说:
抽象类就是包含抽象方法的类
抽象类其实就是一种规范
//什么是抽象方法?
没有实现成员方法 但是又给我吗指引啦一个目标
//抽象类的定义:
要对将来的程序定义一种规范
//什么时候使用抽象类:
就是在对程序进行规范的定义
//如何声明抽象类?
使用 abstract 声明一个抽象类
含有抽象方法的类一定是抽象类
抽象类不一定包含抽象方法
抽象方法一定要使用 abstract 关键字进行声明 该方法一定没有方法体 后加;(分号)
抽象的成员不能声明为私有的或者是 final 修饰的
抽象类不允许直接使用(实例化)
抽象类要想使用必须被后代完全实现 方可使用
抽象方法的声明格式怎样 实现方法的格式必须要严格按照抽象方法的声明来实现(参数的个数 是否为静态 public protected)
//什么是接口 ?
从宏观角度:
USB接口
主板CPU 显卡 内存插槽
从程序角度来说:
接口是抽的更厉害的抽象类
借口是所有的成员方法全部是抽象方法
//为什么使用接口 ?
要定义一种都无法实现的规范
//如何使用借接口
使用 interface 关键字 后不要加class直接跟接口名
接口当中不允许包含成员属性
接口当中的成员方法必须是没有实现的方法 但是不需要使用 abstract
接口不允许被实例化
继承接口使用 implements 而不是 extends
一个类可以继承多个接口 接口和接口之前使用逗号隔开
一个类只允许继承一个父类 如果同时要继承一个类和一个或多个接口 要先去继承类 再去继承机接口 先 extends 在 implements
//接口和抽象类的区别?
抽象类使用abstract声明 而接口使用interface声明
接口当中的方法一定都是抽象方法 抽象类当中的方法不一定全都是抽象方法
接口和抽象类都是对后代(子类)定义一种规范而产生的一种产物
接口是抽象类的特殊情况
接口被继承使用implements 抽象类被继承使用extends
接口可以同时继承多个 而抽象类一次只能被继承一个
<?php
header("content-type:text/html;charset=utf-8");
abstract class Marry{
public $name = "小张";
public $age = 25;
public $sex = "男";
public function say(){
echo "不小啦,想娶媳妇了";
}
public function buyCar(){
echo "我买啦一个二首的自行车";
}
public function buyHouse(){
echo "我买了一套房子,在看守所";
}
abstract public function register($address="");
abstract public function getSon() ;
}
//抽象类不允许被实例化
//$m = new Marry();
class MarryWithCuiHua extends Marry{
public function register($address=""){
echo "啊 小张终于领证啦";
}
public function getSon(){
echo "啊 效率很快 生了";
}
}
//只有所有的抽象方法全部都被实现 才允许 被实例化使用
$m = new MarryWithCuiHua;
$m->register();
echo "<br/>";
$m->getSon();
<?php
//使用接口关键字
interface Person{
//接口不允许包含成员属性
//public $name = "zhangsan";
//接口可以定义常量
const constant = 'const';
//成员方法不需要使用 abstract 修饰
function say();
function eat();
}
//继承接口不能使用 extends , 而是使用implements
class Son implements Person{
function say(){
echo "i can say";
}
function eat(){
echo "I can eat";
}
}
$s = new Son;
$s->say();