可以。你在接口中声明的方法,都可以访问。并且访问的是匿名类中实现了的方法。比如:System.out.println(d.readLabel()); //d.readLabel()访问的就是匿名类的方法readLabel();而不是接口中什么也没有实现的方法readLabel()。其实是用到动态绑定。不信,你将错误行注释掉,再编译运行。屏幕打印出: Tanzania
dest(final String dest, final float price) 这个方法返回的匿名类的对象向上转型了,成了Destination ,但Destination没有cost,label和readcost()
interface Destination {
String readLabel();
}
修改为
interface Destination {
String readLabel();
int readcost();
} 那么System.out.println("a"+d.readcost()); 就能正确访问?
如果可以,那又该怎样做?
//d.readLabel()访问的就是匿名类的方法readLabel();而不是接口中什么也没有实现的方法readLabel()。其实是用到动态绑定。不信,你将错误行注释掉,再编译运行。屏幕打印出:
Tanzania
假如你把接口中的这句String readLabel();注释掉,你会发现,d就不能调用这个方法了!
然后你做个对比,你把public String readLabel() { return label; }注释掉,你看看d是什么情况,
很明显d可以调用readLabel()方法!所以其他的问题你可以一步步的通过测试就知道程序的执行是什么样子的!