博客列表 >实例演示子类和类成员的应用场景--2019年09月30日

实例演示子类和类成员的应用场景--2019年09月30日

Victor的博客
Victor的博客原创
2019年10月16日 02:16:431118浏览

实例演示子类的三个应用场景;实例演示类成员的三种访问限制符的使用场景

复习面向对象开发中的静态成员,类常量,属性重载,方法重载,抽象成员,接口知识;

实例说明:

1、创建一个汽车类,包含成员属性有:***、型号、价格,且价格为私有属性;

                                包含的成员方法:run()和价格访问器getprice($user),根据$user身份决定是否显示价格;

2、从汽车类中派生一个子类Power_car,用来表明汽车的动力源; 

    Power_car子类继承父类Car的所有属性和方法;

    在子类中,可以实现代码复用:比如实例中的__construct()方法,或使用父类的成员方法;

                     可以实现功能扩展:比如在子类中新增$power属性和powerby()方法;

                     可以实现代码重写:比如子类中对run()方法进行重写。

3、实例中使用了三种访问控制符:public、private、protected;

    使用访问控制符的主要作用是防止外部非正常的访问,污染类中的成员属性或方法,所有对private、protected保护的类属性进行访问时,都需要经过“访问控制器”的管控。

三种访问控制符的使用场景为:

  • public :       类内外、子类中都可以访问 ;

  • protected:    类中和子类中都可以访问,但类外不可以;

  •  private:    仅在类中可以,类外不和 子类中不可以访问

实例代码如下:

实例
<?php

namespace com\php\www;
//声明一个汽车类Car
class Car {
	//三个类成员属性:
	//访问控制符:public:类中、类外、子类均可访问;
	// private:仅类中可以访问,类外和子类都不能访问;
	// protected:类中和子类可以访问,但类外不可访问;
	public $brand;
	public $type;
	private $price;
	//构造方法:在实例化时自动执行,可在此初始化对象,或完成一些需要自动执行的操作;
	public function __construct($brand, $type, $price) {
		//类中对对象的引用,使用伪变量$this;
		//对类自身的引用,使用关键字 self;
		$this->brand = $brand;
		$this->type = $type;
		$this->price = $price;

	}
	//定义一个类成员方法
	public function run() {

		return '汽车 可以跑';
	}
	//价格访问器:定义一个成员方法,用来访问private的成员属性,可在此增加相应的限制条件
	public function getprice($user) {
		return ($user === '会员') ? ($this->brand . '-' . $this->type . ' 价格:' . $this->price) : '无权查看!';
	}

}

$obj = new Car('奥迪', 'Q5', 320000);
echo $obj->run();
echo '<br>';
echo $obj->getprice('访客');
echo '<hr>';

//定义一个子类Power_car,继承和扩展父类的方法
class Power_car extends Car {
	protected $power;
	//构造方法的扩展,增加一个$power,动力属性
	public function __construct($brand, $type, $price, $power) {
		parent::__construct($brand, $type, $price);
		$this->power = $power;
	}
	//为子类新增一个方法powerby(),说明汽车使用什么能源驱动;
	public function powerby() {
		return (empty($this->power) ? '未知能源类型' : $this->power) . ' 汽车';
	}
	//run()方法重写
	public function run() {
		switch (true) {
		case $this->power === '汽油':
			return '汽车 加“汽油” 就可以跑';
			break;
		case $this->power === '电动':
			return '汽车 充“电” 就可以跑';
			break;
		default:
			return '汽车 使用未知的能源类型';
			break;
		}

	}

}

$obj = new Power_car("奔驰", "GLC300", 500000, "汽油");
echo $obj->powerby(), '<br>';
echo $obj->run(), '<br>';
echo $obj->getprice('会员'), '<br>';
echo '<hr>';
?>
运行实例 »
点击 "运行实例" 按钮查看在线实例


总结:

1、练习并初步掌握类的封装、继承和多态;

2、熟悉了子类的代码复用、功能扩展、代码重写,以及访问控制符的使用场景;

3、需要注意:子类重写父类方法时,一定要 高于或等于 父类被覆盖方法的访问权限;

疑问:类中被声明为private的方法,在外部用什么方法可以使用??




声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议