现在我就简单的说上一两点,如有错误之处,还请大家不吝赐教。
一:没有重载(overload)
<<php web 开发 第三版>>中说的重载其实应该是 覆盖 比较准确(overwrite),看过think in java,think in c++就知道了他们的意义了。overwrite是子类和父类之间的,如果父类有一个函数叫Dis, 子类也定义一个Dis,那么 这个函数就被子类 overwrite了,叫覆盖,覆写都可以;而重载是只同一个类中有同名的函数,但是参数列表不同。比如java可以
class test { void f1(){} void f1(string s){} } |
class test { function f1(){} function f1($string){} } |
二:没有向上传型(upcasting)
简单的说就是,假如有一个父类 animal(动物),他的子类是person(人,人也是动物),那么在java中我们可以这样写代码。类的定义我就不写了,直接写实例化类。
animal a = new person(); //实例化一个动物 a ,用的是人来构造的,可以,因为人也是动物 |
但是php却不可以有这样的写法,我们只能要实例化谁就是谁.
$a = new animal(); 或者 $a = new person();
三:好象没有抽象类(abstract)
如果说没有吧,确实可以这样写类 : abstract class test{}
如果说可以吧,抽象类的内部应该允许出现没有实现的函数,就象是接口interface一样,
function f1();就可以了。但是如果这样写:
abstract class test { function f1(); } |
abstract class test { function f1(){} } |
不过,这样写出来的类,同 java 一样抽象类不能实例化!
好了,今天就先写这么多了,本来还想写写接口的内容。但是 时间好象不够多了。我就大概说一下吧。我测试了一下,接口方面还是和java,c#等语言差不多的,也是用interface直接定义,并且用 implements关键字去实现。我写一段代码,这段代码可以正常运行,想要说明的问题是,如果有一个接口内有一个方法叫display (),那么实现这个接口的类如果继承了一个类中正好也有相同display()方法的,那么这个类可以被实例化,也就是说,最后这个子类因为继承了一个有 display()方法的类,而不用实现(implements)这个接口了,因为已经被实现了。代码如下:
interface Displayable //接口 class DD implements Displayable //实现了接口 } class ex extends test implements Displayable }
|