最近在学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中接口的比较了。