关于为接口实例化调用方法的问题

qq_31134691 2015-10-09 07:01:42
代码如下:
------------------------------------------------------------------------------------------------------------------------
class A implements Cool {
public void print() {
System.out.println("cool");
}

public void print2() {
System.out.println("good");
}

public String toString() {
return "good";
}
}

interface Cool {
void print();
}

public class Test10 {
public static void main(String[] args) {
Cool cool=new A();
cool.print();
//cool.print2(); //为什么左边这行代码显示调用此方法失败,而Cool接口可以调用toString()方法?
System.out.println(cool);
}
}
...全文
144 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
scc_9420 2015-10-09
  • 打赏
  • 举报
回复
print2()方法是类A的成员,接口Cool中没有该方法的声明,所以不构成多态,此父类引用(cool)不能调用子类(A)中的新定义的成员;可以改成((A)cool.print2()); toString()方法是Object类中有声明,效果跟print()方法类似,都存在多态。
飏飏一蝶 2015-10-09
  • 打赏
  • 举报
回复
好问题! cool不能调用自己定义接口中没有的方法 所以print2()不能被调用 而根据官方文档的意思 http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.2 接口也隐式的继承了Object的方法,所以接口中出现Object类似方法而不符合重写规则是会报错 隐式继承的接口不需要重写,但依然可以调用

50,639

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧