A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jiangweiwei001 中级黑马   /  2015-8-30 12:33  /  732 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. Java中的多态性理解(注意与C++区分)
Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意味着通常情况下,我们不必判定是否应该进行动态绑定—它会自动发生。
final方法会使编译器生成更有效的代码,这也是为什么说声明为final方法能在一定程度上提高性能(效果不明显)。
如果某个方法是静态的,它的行为就不具有多态性:
classStaticSuper{
publicstaticStringstaticGet(){
return"Base staticGet()";
}
publicStringdynamicGet(){
return"Base dynamicGet()";
}
}
classStaticSubextendsStaticSuper{
publicstaticStringstaticGet(){
return"Derived staticGet()";
}
publicStringdynamicGet(){
return"Derived dynamicGet()";
}
}
publicclassStaticPolymorphism{
publicstaticvoidmain(String[]args){
StaticSupersup=newStaticSub();
System.out.println(sup.staticGet());
System.out.println(sup.dynamicGet());
}
}
输出:
Base staticGet()
Derived dynamicGet()
构造函数并不具有多态性,它们实际上是static方法,只不过该static声明是隐式的。因此,构造函数不能够被override。
在父类构造函数内部调用具有多态行为的函数将导致无法预测的结果,因为此时子类对象还没初始化,此时调用子类方法不会得到我们想要的结果。
classGlyph{
voiddraw(){
System.out.println("Glyph.draw()");
}
Glyph(){
System.out.println("Glyph() before draw()");
draw();
System.out.println("G

6 个回复

倒序浏览
我来了 来自手机 中级黑马 2015-8-30 13:02:58
沙发
额,还没学到,先留着,谢谢
回复 使用道具 举报
自己手添的              --------精华-----------
回复 使用道具 举报
还可以吧
回复 使用道具 举报
看作者的口气,是这些观点就这么记下了,并将继续这么以为下去,事实的本质就是这样,也不用别人评论下了是吗?
回复 使用道具 举报
赞一个。。
回复 使用道具 举报
至尊幽蓝 发表于 2015-8-30 14:06
看作者的口气,是这些观点就这么记下了,并将继续这么以为下去,事实的本质就是这样,也不用别人评论下了是 ...

还望大神指点!!谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马