PHP面向对象之私有属性继承和重写 private

私有属性继承和重写

  • 说明
    • 私有属性可以继承但不能重写

私有-受保护

  • 代码分析(私有-受保护)
    • showA()和showB()中的$this都表示B的对象,B中继承了A的私有属性,所以B中有两个$name
    • 在showA()中只能访问A中的$name,不能访问B中的$name
    • 在showB()中只能访问B中的$name,不能访问A中的$name
<?php 
class A {
  private $name='PHP';
	public function showA() {
    echo $this->name,'<br>';	//PHP
    var_dump($this);
	}
}
class B extends A {
	private $name='Java';
	public function showB() {
    echo $this->name,'<br>';	//Java
	}
}
$obj=new B();
$obj->showA();
$obj->showB();
?> 

受保护

  • 代码分析(受保护)
    • private 私有属性,只能在类的内部访问,所以showA()可以访问A中的$this,而showB()只能访问B中的$this
    • protected 保护属性,能够在继承间属性继承,所以showA()和showB()都能够访问A中的$this
<?php 
class A {
  protected $name='PHP';
	public function showA() {
    echo $this->name,'<br>';	//PHP
    var_dump($this);
	}
}
class B extends A {
	public function showB() {
    echo $this->name,'<br>';	//PHP
	}
}
$obj=new B();
$obj->showA();
$obj->showB();
?> 

受保护-公有

  • 代码分析(受保护-公有)
    • B中将A的$name重写,所以$obj中只有一个$name,($name='Java')
    • 不管$this在哪个方法中访问,就只能访问这个$name
<?php 
class A {
  protected $name='PHP';
	public function showA() {
    echo $this->name,'<br>';	//Java
    var_dump($this);
	}
}
class B extends A {
  public $name='Java';
	public function showB() {
    echo $this->name,'<br>';	//Java
	}
}
$obj=new B();
$obj->showA();
$obj->showB();
?> 

私有-公有

  • 代码分析(私有-公有)
    • 在showA()中既能访问私有的$name,也能访问公有的$name,但是私有的比公有的权限高,所以输出PHP
    • 在showB()中不能访问私有的$name,只能访问公有的$name,所以输出Java
<?php 
class A {
  private $name='PHP';
	public function showA() {
    echo $this->name,'<br>';	//PHP
    var_dump($this);
	}
}
class B extends A {
  public $name='Java';
	public function showB() {
    echo $this->name,'<br>';	//Java
	}
}
$obj=new B();
$obj->showA();
$obj->showB();
?> 
原文地址:https://www.cnblogs.com/SharkJiao/p/14117075.html