黑马程序员技术交流社区

标题: Java多态笔记,精华 [打印本页]

作者: jiangweiwei001    时间: 2015-8-30 12:33
标题: Java多态笔记,精华
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
作者: 我来了    时间: 2015-8-30 13:02
额,还没学到,先留着,谢谢
作者: ksh    时间: 2015-8-30 13:18
自己手添的              --------精华-----------
作者: Z攻城狮    时间: 2015-8-30 13:42
还可以吧
作者: 至尊幽蓝    时间: 2015-8-30 14:06
看作者的口气,是这些观点就这么记下了,并将继续这么以为下去,事实的本质就是这样,也不用别人评论下了是吗?
作者: Ci功    时间: 2015-8-30 15:23
赞一个。。
作者: jiangweiwei001    时间: 2015-8-30 21:04
至尊幽蓝 发表于 2015-8-30 14:06
看作者的口气,是这些观点就这么记下了,并将继续这么以为下去,事实的本质就是这样,也不用别人评论下了是 ...

还望大神指点!!谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2