首页 > 程序开发 > 软件开发 > Java >

由Eclipse源码跳转功能想到的一个Java基础知识

2011-07-27

最近在使用Eclipse阅读一些优秀的开源项目源码,其间发现一个初学者很容易进入的陷阱。现叙述如下: 假设有两个类,子类Sub继承自父类Base,代码如下://Base类public class Base { public void say(){ ...

最近在使用Eclipse阅读一些优秀的开源项目源码,其间发现一个初学者很容易进入的陷阱。现叙述如下:
假设有两个类,子类Sub继承自父类Base,代码如下:
//Base类
public class Base {
public void say(){
sayHello();
}
public void sayHello(){
System.out.println("Base say Hello!");
}
}
//Sub类
public class Sub extends Base {
@Override
public void sayHello() {
System.out.println("Sub say Hello!");
}
public void test(){
super.say();
}
}
//测试类TestCase
public class TestCase {
public static void main(String[] args) {
Sub sub=new Sub();
sub.test(); //结果是"Sub say Hello!"还是"Base say Hello!"?
}
}
如果你已经看出结果是"Sub say Hello!",那么恭喜你,你的Java基本功很扎实。在Sub类的test()方法中调用super.say(),可以简单的理解成普通的函数调用 ,将super.say()调用替换成实现代码后,Sub的实现代码如下:
public class Sub extends Base {
@Override
public void sayHello() {
System.out.println("Sub say Hello!");
}
public void test(){
sayHello(); //super.say()调用的实现代码
}
}
到这,结果应该显而易见了,此处sayHello()指向Sub.sayHello()方法,所以输出结果为"Sub say Hello!"。
背景知识讲完了,下面看一下Eclipse中的代码跟踪功能:

\

按住Ctrl键,鼠标单击super.say(),Eclipse中跳转结果如下:

\

按住Ctrl键,单击第3行代码sayHello(),跳转结果如下:

\

看到这样的跳转结果会让很多初学者摸不着头脑。希望在今后的Eclipse版本中能够尽快的修正这个功能,毕竟这对Eclipse开发团队来说很容易做到。
本文出自 “春华秋实” 博客

相关文章
最新文章
热点推荐