zoukankan      html  css  js  c++  java
  • 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();
    ?> 
    
  • 相关阅读:
    [USACO17FEB]Why Did the Cow Cross the Road III S
    [POI2015]PIE
    GSS3
    Bzoj3203: [Sdoi2013]保护出题人 凸包 + 三分
    斜率优化
    fread优化读入
    [USACO09JAN]安全出行Safe Travel 最短路,并查集
    zookeeper单机模式实现分布式,开发部署测试模式机器有限情况
    解决 jmeter An error occurred: Error while processing samples:Mismatch
    python 垃圾回收解析
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/14117075.html
Copyright © 2011-2022 走看看