当前位置:编程学习 > JAVA >>

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

 最近在使用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开发团队来说很容易做到。
本文出自 “春华秋实” 博客

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,