java和php面向对象的一些比较

最近在学php的面向对象,顺便也复习了一下java的面向对象,也体会到了什么叫温故而知新。php的面向对象和java相比有很多相似之处,可以说java的面向对象编程纯度远远高于php,这算是php的一些缺陷或者是限制吧。

一   继承

相同点:都不允许多重继承,不能继承父类的私有属性或者方法,但是允许多层继承

下面是不同点:

java中子类实例化先调用父类的构造方法,再调用自己的构造方法;但是php5.3是不会自动调用父类的构造方法,php如果要调用父类的构造方法需要使用parent::__construct()或者父类名称::__construct(),但是php5.4和java一样是会实例化父类的构造方法的


二  方法重载

java中重载是可以实现的,但是php只能模拟重载,php使用魔法函数来模拟重载,下面代码会出现错误

 class Person{
     public $name;
     public $age;
     public function __construct(){
        echo "我是父类的构造方法</br>";
     }
     public function setName($name){
       $this->name=$name;
     }
     public function getName(){
        return  $this->name;
     }
     public function setAge($age){
         $this->age=$age;
     }
     public function getAge(){
        return  $this->age;
     }
     public function test(){
     }
     public function test($weight){
     }
  }

java的重载就不多说了,下面来模拟实现一个php的重载

public function test1(){
       echo "我是test</br>";
     }
     public function test2($weight){
         echo "我的体重是".$weight."</br>";
     }
     public function __call($method,$parameter){
      
      
       if(count($parameter)==1){
         $this->test2(50);
       }else {
           $this->test1();
       }
     }

我只是先出了其中的一部分,调用的话就$stu->test("50");   $stu->test();$stu表示类的实例,但是目前php开发团队不推荐使用


三   方法重写

概念的话就不多说了,java和php都要求在子类里如果要重写父类的方法,不能降低访问权限,但是php要注意一种情况就是如果父类里有个叫test()的方法,子类里面就不能有类似test($name)的方法,这一点和第二点是同一回事


四  抽象类

这一块java和php都是一样的,同样的抽象类里面可以没有抽象方法,但是如果一个类里面如有抽象方法那么这个类就一定是抽象类,还有就是一个类如果继承了抽象类就必须实现里面的所有抽象方法,最重要的一点就是抽象类里的抽象方法只允许声明不允许实现。



这一节先到这里,下次就是java的接口和php中接口的比较了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值