php 继承的一个奇怪之处

1 篇文章 0 订阅
<?php
class Par
{
	protected $list = array(1);
	// private $list = array(1);

	public function dump()
	{
		/**
		 * 如果 list 是 private 的,则子类继承 dump 方法后,只能访问父类的 list 属性
		 * 如果 list 是非 private 的,则会优先访问自己的 list,然后才是父类的 list 属性
		 */
		var_dump($this->list);
		echo '<br/><br/>';
		// 如果是 Par 的实例调用 dump() 方法,则 $this 指向 Par 的实例
		// 否则若是 Child 的实例调用 dump() 方法,则 $this 指向 Child 的实例
		var_dump($this);
		
		/**
		 * 方法 testEcho() 的继承和 list 属性的继承方式一样
		 */
		$this->testEcho();
	}

	protected function testEcho()
	{
		echo '<br/>class par';
		echo '<br/>';
	}
}

class Child extends Par
{
	public $list = array(1, 2);

	public function testEcho()
	{
		echo '<br/>class child';
		echo '<br/>';
	}
}

$obj = new Child();
$obj->dump();


总结:

1. 子类调用从父类中继承的某个方法,若此方法访问一个在父类中存在且非 private 的属性的几种情况:

  1)若子类存在同名属性,则最终访问的是子类的这个属性

  2)若子类中不存在同名属性,则最终访问的是父类的这个属性

  3)若此属性在父类中存在且是 private 的,则始终访问的是父类的这个属性

2. 子类调用从父类中继承的某个方法,若此方法又调用一个父类中存在且非 private 的方法的情况和上面属性的一样

3.  Java 中对于第一种情况的处理方式不同,只要调用的方法是从父类中继承过来的,则此方法只能访问父类的属性,而不能访问子类的属性(不管采用何种修饰符)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值