首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Exception >

java中如何能声明一个方法使其不能被继承类里的方法重写(override)?

2014-01-26 
java中如何能声明一个方法使其不能被继承类里的方法重写(override)?似乎java中的方法缺省就是能够实现多态

java中如何能声明一个方法使其不能被继承类里的方法重写(override)?

似乎java中的方法缺省就是能够实现多态的。在C++和C#里是virtual的,在VB.Net里是Overridable的。
在我的印象里,这种实现多态的方法,需要在调用时多进行一次间接寻址(使用了C++里的术语,就是在虚函数表中得到具体函数的地址),稍微影响一点点效率。在C++中函数(或者叫类的方法)并不是天生就是可以实现多态的(能够被重写(override),或者说是虚函数)。这应该说是出于效率上的考虑吧。在.net阵营里的C#和VB.net都保留了这一行为特点,即如果不显示声明为可重写的(overridable VB.net或virtual C#),就不可以在调用中实现多态。
请问java中的方法是否是天生就具备多态特性的?如果是,有没有手段声明某个方法不可以实现多态呢?(是用final吗?)如果是这样的话,大家能不能猜测一下java设计者这样设计的初衷呢?他们是根据怎样的研究以及统计数据得出大部分方法都是多态的结论的呢(如果大部分方法不是支持多态的,则语言这样设计就显得有些为了理想而丧失效率了)?
由于我的水平不高,所以产生这样的疑问,希望高手尽量回答我的问题,尤其是最后的讨论。我觉得这样的讨论很可能比较有趣。

------解决方法--------------------------------------------------------
类声明为final或方法声明为final.
------解决方法--------------------------------------------------------
将方法声明为final
------解决方法--------------------------------------------------------
第一个问题: 答案应该是肯定的吧,java默认是可以实现多态的.

第二个问题:要使某个方法不能实现多态的功能,可以有几个途径:1.方法申明为private(此时,该方法隐式调用final修饰关键字;2.显示调用final字段来修饰方法;3,将方法所在的类声明为private或final类型,这样 ,类的所有属性和方法都会隐式final; 4.方法声明为static.

第三个问题:就比较麻烦了,我个人认为,每中语言被设计出来,都有她的道理,假如java的设计者将java设计成和C++一样的,那还什么必要呢?直接用C++就行了,你说呢?

每种语言都是为不同的目标和满足不同的需要或是为了以不同的途径解决不同的问题的而设计出来的.所以必然会有得失,如果我我们只从语言性能,效率去考虑,就很难得到答案了.为什么C++的控制那么复杂,指针,内存泄露等存在那么多的缺陷,却还要用,而不采取java的形式; 而java的效率,功能等却比不上C++的,而不用C++的那套机制呢?

所以,我们考虑问题应该从每种语言针对的应用领域去理解应该就更容易理解设计者的为什么那样设计,即使是有很多不足的.

正如我们知道的那样.C++的目标是强大的功能和控制能力,代价是复杂性提高,程序员要做的事更多,C++有时会牺牲OOP模型以获取性能的提升;Java的目标是兼容性和分布式应用,为此不惜牺牲一些运行速度。

个人见解!
------解决方法--------------------------------------------------------
类声明为final或方法声明为final.
------解决方法--------------------------------------------------------
关键字
final
------解决方法--------------------------------------------------------
final

        

热点排行