C#中有virtual关键字而Java中没有所带来的思考

56 篇文章 0 订阅

C#

C#中实现多态有三种方式:抽象类,虚方法,接口

其中虚方法的概念,用virtual 关键字来表示,每个类都会有一个虚函数表。

该虚函数表首先会从父类中继承得到父类的虚函数表,如果子类中重写了父类的虚函数(不管重写后的函数是否为虚函数),要调用哪个虚函数,是根据当前实际的对象来判断的(不管指针所属类型是否为当前类,有可能是父类型),指针当前指向的是哪种类型的对象,就调用哪个类型中类定义的虚函数。每个类只有一张虚拟函数表,所有的对象共用这张表。

C#的函数多态就是通过虚函数来实现的

 

C#中,如果函数不是虚函数,则调用某个函数,是根据当前指针类型来判断的,并不是根据指针所指向对象的类型

 

Java

Java中没有Virtual关键字,没有虚方法的概念。

Java中,如果函数不是抽象函数,而是一个普通函数,它是默认实现类似C#中虚函数功能的。

也就是说,调用某个函数,是根据当前指针所指向对象的类型来判断的,而不是根据指针类型判断。正好与C#中的普通函数相反。即:JAVA里自动实现了虚函数

 

参考:深入理解virtual,abstract class,interface .

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值