直接看代码和注释吧
// private只能在类中访问 // protected只能在类中和子类中访问 // public 可以在任何地方访问
class Father
{
public $name = '郭靖'; // 名字
private $wife = '黄蓉'; // 老婆
protected $money = 5000; // 财产
// 做饭任何人都可以教
public function cook()
{
echo '做饭';
}
// 功夫只传儿子
protected function gongfu()
{
echo '降龙十八掌';
}
// 偷东西这事不能传儿子
private function steel()
{
echo '不要脸的偷东西';
}
}
class Son extends Father
{
public function callGongfu()
{
$this->gongfu(); // 在内部使用父类继承过来的方法
}
public function callSteel()
{
// $this->steel(); // 不能继承父类私有方法
}
public function callFatherProperty()
{
echo $this->name;
echo $this->money;
// echo $this->wife; // 不能继承
}
}
$son = new Son();
$son->cook();
//$son->gongfu(); //继承成功,调用失败,protected只用在类内部使用
//$son->steel(); // 继承失败,调用失败,private 不能被继承
$son->callGongfu(); // 调用成功 说明protected可以在类内部使用
$son->callFatherProperty();
//var_dump($son);
final 修饰的类不能被继承
单独设置一个抽象类是没有意义的,只有有了抽象方法,抽象类才有了血肉。下面介绍抽象方法。
abstract 抽象方法
用abstract修饰的类表示这个方法是一个抽象方法。
抽象方法,只有方法的声明部分,没有方法体。
抽象方法没有 {} ,而采用 ; 结束。
一个类中,只要有一个抽象方法,这个类必须被声明为抽象类。
抽象方法在子类中必须被重写
abstract class User {
abstract public function eat();
public function play() {
echo 'user play'.'<br>';
}
}
//new User() // 不能实例化
class NormalUser extends User {
public function eat() {
echo 'normal user eat'.'<br>';
}
}
$normalUser = new NormalUser(); // 可以实例化
$normalUser->play();
$normalUser->eat();