匿名类中的成员外面是访问不了的
System.out.println(d.readLabel());能正确访问是因为外面定义了个接口

解决方案 »

  1.   

    请问如果
    interface Destination {
      String readLabel();

    修改为
    interface Destination {
      String readLabel();
      int readcost();
    } 那么System.out.println("a"+d.readcost()); 就能正确访问?
      

  2.   

    能调用匿名内部类的方法吗?Squall1009(钰枫)
    如果可以,那又该怎样做?
      

  3.   

    可以。你在接口中声明的方法,都可以访问。并且访问的是匿名类中实现了的方法。比如:System.out.println(d.readLabel()); 
    //d.readLabel()访问的就是匿名类的方法readLabel();而不是接口中什么也没有实现的方法readLabel()。其实是用到动态绑定。不信,你将错误行注释掉,再编译运行。屏幕打印出:
    Tanzania
      

  4.   

    dest(final String dest, final float price) 这个方法返回的匿名类的对象向上转型了,成了Destination ,但Destination没有cost,label和readcost()
      

  5.   

    d.readLabel()其实调用的是接口里的那个!
      

  6.   

    你可以做个测试,你就会明白一切的!
    假如你把接口中的这句String readLabel();注释掉,你会发现,d就不能调用这个方法了!
    然后你做个对比,你把public String readLabel() { return label; }注释掉,你看看d是什么情况,
    很明显d可以调用readLabel()方法!所以其他的问题你可以一步步的通过测试就知道程序的执行是什么样子的!