xcxy2015 2017-04-18 12:38 采纳率: 0%
浏览 950
已采纳

一个很基础的问题,eclipse应该不算编译器吧?可是为什么会出现这种情况

这是一段十分简单的代码
public class Test{
    public static void main(String[] args) {
         B a = new A();
         System.out.println(a.avc(null));
    }
}
class A extends B{
    public int a = 0;
    //@Override
    public String avc(Object e ){
        return "123456";        
    } 
}
class B{
    public Object avc(Object e){
        return null;    
    }
}

A类继承B类,他们有两个仅仅返回值不同的方法
我的问题是:我看到有的书上说编译器编译时会检查一个对象的声明类型中是否含有掉用的这个方法,而虚拟机则会根据他的实际类型选择调用最合适的方法(好像是java核心技术这本书里的),那现在我们用eclipse代码补全这一行,如截图所示,他并没有显示类A中的那个方法,但运行结果确实是运行了A类的方法,这个特性跟书上讲的编译器有一样的特性。那么eclipse的代码补全功能也是根据编译器做的吗?!

图片说明

图片说明

  • 写回答

1条回答 默认 最新

  • T_world 2017-04-18 12:59
    关注

    这个说的是java中的动态绑定,也就是用父类引用指向子类对象,这个知识点在后来的设计模式中非常重要,
    我们知道虽然java是一种解释性语言,但是它也逃不过从字节码编译成机器码,也就是编译的过程,这个过程用到的是编译原理的知识,而eclipse中的代码补全机制明显用到的也是编译原理,从这个角度来看确实可以说代码补全机制是根据编译器的原理实现的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流