PHP5面向对象的特性之对照java不完全分析

PHP5也支持对 面向对象,但是和java,c#,C++比起来还有很多不同,有的我认为是不足。
  现在我就简单的说上一两点,如有错误之处,还请大家不吝赐教。

  一:没有重载(overload)
  <<php web 开发 第三版>>中说的重载其实应该是 覆盖 比较准确(overwrite),看过think in java,think in c++就知道了他们的意义了。overwrite是子类和父类之间的,如果父类有一个函数叫Dis, 子类也定义一个Dis,那么 这个函数就被子类 overwrite了,叫覆盖,覆写都可以;而重载是只同一个类中有同名的函数,但是参数列表不同。比如java可以

class test
{
  void f1(){}
  void f1(string s){}
}
php中却不可以如下这样,这样会报错说 重复定义 了。
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();
}
它会提示你 Non-abstract method ab::aa() must contain body,也就是要加上一对花括号,并去掉分号才行
abstract class test
{
  function f1(){}
}


不过,这样写出来的类,同 java 一样抽象类不能实例化! 

好了,今天就先写这么多了,本来还想写写接口的内容。但是 时间好象不够多了。我就大概说一下吧。我测试了一下,接口方面还是和java,c#等语言差不多的,也是用interface直接定义,并且用 implements关键字去实现。我写一段代码,这段代码可以正常运行,想要说明的问题是,如果有一个接口内有一个方法叫display (),那么实现这个接口的类如果继承了一个类中正好也有相同display()方法的,那么这个类可以被实例化,也就是说,最后这个子类因为继承了一个有 display()方法的类,而不用实现(implements)这个接口了,因为已经被实现了。代码如下:

interface Displayable //接口
{
 function display();
}

class DD implements Displayable  //实现了接口
{
 function display()
 {
  echo '实现了接口 Displayable' . '<br/>';
 }
}
class test   //没有实现接口,但是有display()方法

 function display()
 {
  echo 'test/'s print_erroe()' . '<br/>';
 }

}

class ex extends test implements Displayable
{

}


$b = new ex();
$b -> display();

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值