再谈高级面向对象编程之抽象类和方法

来源:互联网 发布:淘宝联盟——我的舞台 编辑:程序博客网 时间: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(){}


0 0
原创粉丝点击