再谈高级面向对象编程之抽象类和方法
来源:互联网 发布:淘宝联盟——我的舞台 编辑:程序博客网 时间:2024/06/05 23:47
抽象类和方法:
抽象类是父类的模板。通常定义一个抽象类,可以指明类的一般行为。
抽象类和普通类的最大区别在于,如果试图从抽象类创建一个对象将会出现一个致命的错误,相反,抽象类就是用来扩展的,然后创建这些类的实例。
抽象类的定义方式:abstract
知识拓展:
方法__toString()介绍
如果在类中定义了这个方法,当这个类的对象用作string类型的时候就会自动调用这个方法。
对象被定义为复杂的变量类型,并不期望作为标量变量来使用。然而,在类中增加一个__toString()方法对开发者来说也是比较常见,至少可以作为一个简单的调试工具。
作为一个开发者,通常在类中定义一个__toString()方法,我们可以在类中被当作一个字符串来使用的时候知道该怎么做,而不是让PHP产生错误。
如果我们设置方法的可见性,只要定义时在abstract关键字之后添加相应的关键字。
Abstract public functionmethodName();
抽象类:
Abstract class Dog{
Protected $_name;
Abstract public function getname();
}
class Cat extends Dog{
function getname(){
return $this->_name;
}
}
注意:在扩展的类实现抽象方法的时候,比如Cat::getname()方法,其可见性必须高于或等于抽象方法定义的可见性。如果抽象方法是public,扩展类的实现方法也必须是公开的。如果抽象方法是protected,那么扩展类将只能是受保护的或者公开的,方法的实现也要必须和抽象方法的定义具有一样数目的参数。
只要类中有抽象方法,那么这个类就是抽象类。一个类可以没有抽象方法,和属性一样,抽象方法需要被派生类继承。
【示例】创建抽象类和方法
Abstract class shape{
}
需要记住的是,一个类被声明为抽象类后,就不能从它创建对象。
定义一个抽象方法:
Abstract protected functiongetarea();
这个方法表示shape类的任何子类都需要定义一个getarea()方法,而且具体实现的方法不能有任何参数,其可见性必须是public或者protected(可见性相同或者更强)。
定义第二个抽象方法:
Abstract protected functiongetperimeter();
【示例】创建Triangle类
1. 声明Triangle类:
Class Triangle extendsshape{
2. 声明属性
Private $_sides =array();
Private$_perimeter = null;
第一个属性用数组保存三条边的长度,第二个变量将会用于保存周长。所有的属性都是私有的,因为它们不应该被类外的代码访问,并且我们也无法想象一个Triangle类如何被继承。
3. 定义构造函数
Function __ construct($s0 = 0,$s1 = 0,$s2 = 0){
$this -> _sides[] = $s0;
$this -> _sides[] = $s1;
$this -> _sides[] = $s2;
$this -> _perimeter = array_sum($this->_sides);
}
Array_sum()函数会把数组里的全部元素累加到一起。
4. 创建getarea()方法:
public functiongetarea(){}
5. 创建getperimeter()方法:
Public functiongetperimeter(){}
- 再谈高级面向对象编程之抽象类和方法
- PHP面向对象编程--抽象类和方法
- 面向对象编程之抽象
- 再谈高级面向对象编程之接口
- 面向对象之抽象方法
- 面向对象编程基础 五 抽象函数和抽象类
- 面向对象——抽象类和抽象方法
- php面向对象(OOP)—抽象方法和抽象类
- Java面向对象05-抽象方法,抽象类和接口
- Java面向对象-抽象方法和抽象类
- 面向对象高级特性1:抽象类
- 5.4-全栈Java笔记:面向对象进阶之对象的转型 | FINAL关键字 |抽象方法和抽象类
- 面向对象 抽象方法 抽象类
- 面向对象之抽象类
- 面向对象之抽象类
- 面向对象之抽象类
- C#面向对象 多态的实现之 - 虚方法和抽象类:
- python之面向对象高级编程
- Android Studio创建项目
- Nativescript学习遇到的一些问题
- Kinect V2 开发专题(2)项目配置与API概况
- myAche
- jdbc技术(一)
- 再谈高级面向对象编程之抽象类和方法
- 冒泡排序算法
- 初识Hadoop
- 按照范围过滤所使用的类是Lucene的RangeFilter
- mp4 文件格式系列
- Android通过NDK获取Keystore签名值 .
- [转载]Ogre中的内存泄露
- Hibernate,JPA 对象关系映射之关联关系映射策略
- gvim下的常识性知识