java VS c++ 概念理解

java VS c++ 概念理解

#1 java 为什么没有多重继承
(1)Java中接口可以多继承,但不能有类的多继承,这主要是因为多继承会引起二义性。如类a中有x方法,类b中也有x方法,若允许多继承,类c继承自类a,b, 那么类c 对象调用x方法就不明确该调用哪一个
(2)但Java中接口可以多继承,是因为接口中的方法都是抽象的(抽象方法没有方法体),即便多个父接口有同名的抽象方法也不会有歧义,且允许接口多继承有一个好处就是当实现多个接口时,若两个接口有同样的方法,那么实现一次就可以
(3)c++中多继承同样会引起二义性,解决方法有如下三种:一 使用作用域限定符指明访问哪一个基类的成员函数
子类中的同名覆盖父类中有歧义的成员
使用虚基类、虚继承(虚基类的成员在进一步派生过程中和派生类一起维护同一个内存拷贝)

#2 java 和 c++ 多态机制的差异

(1)java中实际调用哪个方法,由当前指针所指向对象的类型来判断,而c++是根据指针自身类型来判断
(2)c++中未声明为虚函数时实际调用方法由当前指针类型来决定,而不是指针所指向的对象,只有声明为virtual时,才和Java调用机制相同,即c++的多态是通过虚函数实现的

#3 java 中接口机制相对于c++中多继承机制的优势
(1)接口中的方法都抽象的,即便多个父接有同名的抽象方法也不会产生歧义,但c++多继承会产生二义性
(2)当实现多个接口时若两接口有同样的方法,实现一次就可以
(3)从整体上看,接口赋予了java强大的面向对象的能力,使得java 可维护性、拓展性、安全性、严密性更好

#4 绑定——动态绑定——静态绑定

●绑定:确定程序运行时调用何种方法的操作称为绑定
●静态绑定:程席执行前就明确的绑定。即在程序编译过程中就已经明确调用的方法是哪个类的哪个方法
●动态绑定:在程序运行时才能确定调用哪个方法(实现动态多态)
*****注意及理解
(1)为什么需要绑定——继承中子类重写父类方法时具本调用哪个方法不知
(2)Java中如果一个方法不可被继承或继承后不可被覆盖,该方法就采用静态绑定(private修饰不可被子类访问、final修饰继承后不可被覆盖、static 修饰的发表方法为类方法)
(3)动态绑定过程: JVM提取方法表->搜索方法签名->调用方法
需动装绑定的方法在每次调用时都要进行搜索.时间开销很大(内联优化)

#5 java中没有虚函数
(1)虚函数:用virtual 关键字说明的函数
包括:基类中用virtual 说明的函数、以及派生类中重写了基 类虚函数的函数(即使没有用virtual 说明)
(2)c++引入虚函数的原因:
虚函数是c++实现多态的基础,准确来说是实现动态多态的基础(基类中定义一个函数为虚函数,子类中重写该虚函数,main 中用基类的引用或指针来调用各子类中重写的方法)
补充:C++的多态分为:静态多态——函数重载
动态多态——通过虚函数实现的多态
(3)java 中没有虚函数
Java是简化c++语法后形成的一种新语言,在java 中动态绑定是默认的,而c++引入虚函数就是为了实现动态绑定,进而实现动态多态,因此Java没有必要引入虚函数,java中的普通函数就相当于c++的虚函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值