`

面向对象设计 5 —— PHP5面向对象进阶(重写(override))

    博客分类:
  • PHP
阅读更多
<?
//重写(override)
/**
* 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,
* 这个过程叫方法的覆盖(override),也称为方法的重写。
* 当对父类的方法进行重写时,子类中的方法必须和父类中对应的方法具有相同的方法名称,
* 在PHP5中不限制输入参数类型、参数数量和返回值类型。(这点和JAVA不同)
* 子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。
* 声明方法时,如果不定义访问权限。默认权限为public。
*/

/**
* 先设置一个父类,这个父类是 “Dog”类,这个类描述了dog的特性。
* Dog有2个眼睛,会跑,会叫。就这样描述先。
* 我养了一直狗,是只小狗,符合Dog类的特性,但有所不同。
* 我的小狗有名字,我的小狗太小了,不会大声的叫,只会哼哼。
*/

//狗有两只眼睛,会汪汪叫,会跑。
class Dog{
	protected $eyeNumber = 2; //属性
	//返回封装属性方法
	public function getEyeNumber(){
		return $this->eyeNumber;
	}
	//狗会叫
	public function yaff(){
		return "Dog yaff,wang...wang....";
	}
	//狗会跑
	public function run(){
		return "Dog run. runing....";
	}
}

$dog = new Dog();
echo "dog have".$dog->getEyeNumber()." eyes. <br>";
echo $dog->yaff()."<br>".$dog->run();
echo "<br><br><br><br>";
class MyDog extends Dog{
	private $name = "狗狗";
	public function getName(){
		return $this->name;
	}
	public function yaff(){
		return $this->name." , heng...heng...";
	}
}
$myDog = new myDog();
echo $myDog->getName()."have".$myDog->getEyeNumber()." cyco.<br>";
echo $myDog->yaff()."<br>".$myDog->run();
?>

<?
//重写方法与访问权限
//子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。
//父类为public子类为private protected
class Dog{
	protected $eyeNumber = 2; //属性
	//返回封装属性方法
	public function getEyeNumber(){
		return $this->eyeNumber;
	}
	//狗会叫
	public function yaff(){
		return "Dog yaff,wang...wang....";
	}
	//狗会跑
	public function run(){
		return "Dog run. runing....";
	}
}
class MyDog extends Dog{
	private $name = "狗狗";
	public function getName(){
		return $this->name;
	}
	//父类是public
	private function yaff(){
		return $this->name." , heng...heng...";
	}
	//父类是private
	protected function run(){
		return "Dog run. runing....";
	}
}	
//会提示错误因为php中不允许这样做
?>

<?
//重写时的参数数量
//子类可以拥有与父类不同的参数数量。(这点与java不同,PHP是弱类型语言。)
class Dog{
	protected $eyeNumber = 2;
	public function getEysNumber(){
		return $this->eyeNumber;
	}
}
class MyDog extends Dog{
	public function getEyeNumber($eys){
		$this->eyeNumber = $eys;
		return $this->eyeNumber;
	}
}
$myDog = new MyDog();
echo "my dog have ".$myDog->getEyeNumber(3)." eyes.";

//如果我们不进行参数传递会报错,下面这句就会出错
echo "my dog have ".$myDog->getEyeNumber()." eyes.";
?>


<?
//构造函数重写
//下面这个例子中,父类和子类都有自己的构造函数,当子类被实例化时,
//子类的构造函数被调用,而父类的构造函数没有被调用,
//请对比第一节的构造函数继承。

class Animal{
	public $legNum = 0;
	public function __construct(){
		$this->legNum = 4;
		echo "I am an animal <br>";
	}
}
class Dog1 extends Animal{
	public function __construct(){
		$this->legNum = 4;
		echo "I am a Dog <br>";
	}
}

$dog1 = new Dog1();
echo "<br>";
echo "legNum is ".$dog1->legNum;
//实例化子类时只是调用了子类的构造函数
//(注:这点和Java不同,在java中构造函数是不能被继承的,而且子类实例化时,子类的构造函数被调用,父类的构造函数也会调用。)
?>
  • 2.zip (5.8 KB)
  • 下载次数: 7
分享到:
评论

相关推荐

    《面向对象程序设计——Java语言》电子课件(程细柱PPT)

    《面向对象程序设计——Java语言》是一门深入探讨如何使用Java进行面向对象编程的课程,由知名讲师程细柱制作的PPT电子课件。面向对象编程(Object-Oriented Programming,简称OOP)是现代软件开发中的核心编程范式...

    面向对象程序设计——入门

    4. **面向对象设计模式** - 工厂模式:提供一个创建对象的接口,让子类决定实例化哪一个类。 - 单例模式:确保一个类只有一个实例,并提供一个全局访问点。 - 观察者模式:定义对象间的一种一对多的依赖关系,当...

    java面向对象程序设计——董小园著

    Java面向对象程序设计是计算机编程领域的一个重要主题,尤其对于初学者和专业开发者而言,深入理解和熟练应用面向对象思想是必不可少的。董小园著的这本书可能是为了详细讲解这一概念,帮助读者掌握Java语言的面向...

    C#面向对象练习进阶

    此外,面向对象设计原则,如SOLID原则(单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则),也是学习进阶的重要部分。遵循这些原则可以使代码更易于维护、扩展和测试。 总之,“C#面向对象练习...

    面向对象进阶,面向对象进阶

    1. 封装:封装是面向对象的基础,它将数据和操作数据的方法绑定在一起,形成一个独立的单元——对象。在Java中,我们通过访问修饰符(如public、private、protected)来控制类的成员对外的可见性,实现数据的安全...

    chapter09面向对象案例继承和多态——动物猫狗.doc

    面向对象案例继承和多态——动物猫狗 面向对象编程是软件开发中的一种编程范式,它强调的是对象之间的交互和继承关系。在本文中,我们将通过一个动物类的案例来讲解面向对象编程中的继承和多态性。 继承是面向对象...

    Java面向对象程序设计

    Java面向对象程序设计是编程领域中的重要主题,尤其在企业级应用开发中占据主导地位。本教程涵盖了这一关键概念,旨在帮助学习者深入理解和掌握Java的面向对象特性。以下是相关知识点的详细说明: 1. **面向对象...

    c#面向对象练习进阶

    本资料“c#面向对象练习进阶”是作者花费半个月时间精心整理的,旨在全面覆盖C# 2.0中的面向对象特性,并通过实际可运行的小例子帮助学习者深化理解。 首先,面向对象编程的三大基本特征在C# 2.0中得到充分展现:...

    Java面向对象(进阶)- 四种权限测试与方法的重写(override-overwrite)

    Java面向对象编程是Java语言的...它们不仅关乎代码的可读性和安全性,也是实现面向对象设计原则,如封装、继承和多态的关键工具。在实际项目中,合理地选择权限修饰符和适时地重写方法,能提高代码的灵活性和可维护性。

    java面向对象课程设计(有程序和报告)

    Java面向对象课程设计是计算机科学领域中一个重要的实践环节,旨在帮助学生深入理解面向对象编程的概念和技巧。在这个课程设计中,学生通常会被要求完成一个实际的项目,使用Java语言来实现,同时需要提交详细的报告...

    《面向对象的程序设计》期末试卷(A)答案.pdf

    面向对象设计原则包括SOLID原则,这些原则帮助设计出易于维护和扩展的代码。SOLID原则包含: - 单一职责原则(Single Responsibility Principle) - 开闭原则(Open/Closed Principle) - 里氏替换原则(Liskov ...

    Java面向对象程序设计+源代码+课后习题答案)

    Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)的概念,是一种强大的编程范式。在Java中,OOP的核心概念包括类、对象、封装、继承、多态等。这本书"Java面向对象程序设计"由耿祥义和...

    面向对象程序设计北工大PPT PDF版

    - 面向对象设计模式的介绍 - 面向对象分析与设计(OOA&D)的方法论 学习这份资料,你可以深入了解面向对象编程的思想,掌握如何在实际项目中运用这些概念,提高编程效率和代码质量。对于软件开发人员来说,理解和...

    20051011--C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

    ### 面向对象设计模式与原则 #### 设计模式简介 设计模式是软件工程领域的一个重要概念,它提供了一套解决特定问题的通用方案。正如克里斯托弗·亚历山大(Christopher Alexander)所言:“每一个模式描述了一个在...

    C#面向对象编程期末参考题

    【标题】"C#面向对象编程期末参考题"揭示了本次讨论的核心——C#编程语言中的面向对象编程(Object-Oriented Programming, OOP)概念,这是软件开发中的一种重要方法论。C#是一种现代、类型安全且面向对象的语言,...

    java基础 面向对象进阶

    ### Java基础:面向对象进阶 #### 课程概述 本次课程由万欣老师主讲,主要聚焦于Java语言中的面向对象编程(OOP)高级概念。面向对象编程是现代软件开发的核心,通过本课程的学习,您将能够更好地理解和应用Java中的...

    java面向对象程序设计第4章源代码

    在Java编程语言中,面向对象程序设计(Object-Oriented Programming, OOP)是一种核心的编程范式,它基于“对象”概念,将数据和处理数据的方法封装在一起。本章节的源代码着重于讲解和实践Java中的面向对象特性,...

    JavaSE进阶 面向对象多态

    JavaSE 进阶 面向对象多态 在 JavaSE 中,面向对象多态是指同一个对象可以具有多种形态,例如一个人可以是老师、丈夫、父亲等。这种多态性是通过方法的重写和重载来实现的。 多态的形式有很多,例如: 1. 方法...

    面向对象程序设计ppt

    面向对象程序设计是计算机科学中的一个重要概念,尤其在Java编程语言中被广泛应用。这份"面向对象程序设计ppt"提供了一个适合初学者的基础教程,旨在帮助新手理解并掌握面向对象编程的核心理念。 首先,我们需要...

Global site tag (gtag.js) - Google Analytics