C++、java面向对象的异同

来源:互联网 发布:直连光猫网络无法识别 编辑:程序博客网 时间:2024/05/21 15:05

面向对象的特点就是封装、继承、多态。

C++和Java作为面向对象语言,原生支持这些特性,但是实现又有一些异同。下面我们就来讨论一下这些不同。

封装

封装就是把事物封装成类,并且对其方法和属性的访问做限定。

C++和Java都是强类型语言,都有类的概念,并且都有private、protected、public关键字来限定属性、方法的访问权限。

他们的不同有:

C++和Java的private、protected、public表示的权限范围不同。

C++中

private表示只能在类自己的方法中访问。

protected表示类自己和类的子类可以访问。

public表示任何地方均可访问。

Java中

private表示类自己的方法中访问。

protected表示类自己和类的子类。

public表示任何地方均可以访问。

不加任何限定字表示同一包下的其他类可以访问。

继承

继承的主要目的就是实现代码复用,通过继承可以在不重新编写逻辑代码的情况下对类的功能进行额外的扩展。
C++的继承实现方式为:
class C1:public B1,B2{}
除了public继承外,还可以使用protected、private继承。他们的不同为:
 父类的public成员父类的protected成员父类的private成员public继承publicprotected访问不到protected继承protectedprotected访问不到private继承privateprivate访问不到

Java的继承实现方式为:
class C1 extends B1{}。相当于的C++的public继承。也就是说Java只保留了public继承的这种继承方式,从替换原则的角度来说,这样实际上更符合面向对象的思想。
C++可以继承多个类,继承之后就拥有了所有子类的属性和方法。
Java只能继承自一个类,但可以实现多个接口。
另外Java语言本身除了提供了Java语法外,还和Java标准库进行了高度的结合,所有的Java类,都是Objcect类的子类。并且不需要程序员显示的继承Object类,编译机默认所有类均直接或间接的继承自Object类。所以说Java是单根继承的。

多态

多态是为了实现接口重用而设计的,他可以使你调用接口,而不需要知道接口中具体实现方式。
不管是C++和Java,为了实现多态,都需要将对象的方法进行晚绑定,即在运行时决定调用对象的哪一个方法,而不是在编译期间确定。
C++方法的晚绑定是通过虚函数实现。
虚函数又分为纯虚函数和虚函数,定义纯虚函数的类可以不实现它,而交给子类区实现,定义虚函数的类需要同时实现它。
无论是虚函数还是纯虚函数,编译器在编译时,不会直接决定该执行哪一个函数,而是通过虚函数表中的函数指针去调用。如此实现了对象方法调用的晚绑定。
Java的除了private方法和static之外的所有方法均为晚绑定,所以Java中没有虚函数的概念。



原创粉丝点击