论java中面向对象与php区别

来源:互联网 发布:mac 网桥 编辑:程序博客网 时间:2024/05/28 19:24

  我学了好几年的php,最近几年移动互联网大爆发,正转型做安卓开发。众所周知,Android是以Java为基准编程的,当然也可以用其他语言比如c++。

 

没有两种语言面向对象是完全一样的,但是大体思维,中心思想都是一样的。
由于各自语言的特性,细节区别非常多,不可胜诉。总体上,php在设计对象模型式参考了java的设计,但改成适应php自身的形式。php没有java的自动化class loader,在类的读取和对象创建上就要注意先后。php的自动读取要手动设置。php由于自身是动态类型语言,变量本身的类型动态,就没有java的重载功能。这也导致类设计上的一些很大区别。php的动态特性和具有自我反射能力,可以把方法名称当成“消息”发送,在运行时判断对象是否能接收消息,java的静态就不能直接应用这样的设计。php的对象可以动态地后添加属性增减数据,java是禁止这样做的。php的方法名称还不区分大小写。php的动态特性也就不需要模板泛型编程的特性。在java中泛型也占很重要的一部分。 总体上从大的方面来说,我认为主要有几点是不同的。

  一:没有重载(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();

总之,这些不同都是由语言特性和适用场合决定的。以上观点仅代表个人观点,与其他个人和机构无关。

0 0
原创粉丝点击