java返回匿名类的问题 java调试 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 三个类都不要 implements Talker. 或者不用匿名类。public class Chinese implements Talker{ public Talker getTalker() { return this; } public void SayHello() { System.out.println("你好!"); } public void SayByeBye() { System.out.println("再见!"); }}其余两个类也这样改一下。 看了一下代码,首先你三个类都要实现Talker接口,但是你在三个类的方法当中返回了匿名类实例,这样一来是匿名类实现了Talker接口,而不是你定义的三个类,所以会报错!所以应该如同一楼说的三个类不要实现Talker这个接口。 接口里定义的方法只能是抽象方法(系统自动加abstract修饰符),你那三个类实现了Talker接口则必须实现接口里定义的全部抽象方法(即重写它们),否则该类将保留从父接口继承到的抽象方法,该类要定义成抽象类。你只是在匿名内部类里面实现了接口的方法,而你的匿名内部类只是那三个类的一个新的方法,构不成对接口方法的重写。 6楼说的不错,当你在匿名内部类中实现一个接口并重写接口的方法时,只代表你的这个匿名内部类重写了接口的方法,而不代表外面的类重写了接口的方法,把匿名内部类换成一个有名字的类你看一下吧,这样好理解些interface Talker { void SayHello(); void SayByeBye();}class Chinese implements Talker { public Talker getTalker() { return new myTalker(); } class myTalker implements Talker { public void SayHello() { System.out.println("你好!"); } public void SayByeBye() { System.out.println("再见!"); } }}实际上重写接口两个方法的是 myTalker类,而不是 Chinese类.如果你要使用Talker类的方法, Chinese不需要实现接口,因为内部已经有一个实现类 myTalker了,所以只要这样就行了public class Test { public static void main(String[] args) { Talker t = new Chinese().getTalker(); t.SayHello(); t.SayByeBye();; }}interface Talker { void SayHello(); void SayByeBye();}class Chinese { public Talker getTalker() { return new myTalker(); } class myTalker implements Talker { public void SayHello() { System.out.println("你好!"); } public void SayByeBye() { System.out.println("再见!"); } }} 因为你的类是实现了Talker接口但是没有实现接口方法 匿名内在内部创建,他实现了Talker接口的方法,并不代表 外部主体类也实现了接口方法,所以你的外部主体类也要实现接口的方法 新手 如何远程访问CVSNT? 关于设置布局管理器为NULL后的问题 displaytag标签无法翻页 Statement究竟是干什么的啊,我这两个超简单的语句有错吗? 数字格式问题求助! 多线程只对同一个数据进行读操作,有必要用同步吗? 如何把小写数字转换成英文? 请教! 后缀名为inc的文件如何解释? 两个JList列表项,左边JList存放数组值,中间有按钮,可以控制列表项中的元素左右移动,但是在移动之后如何保证左边剩下的元素的索引值不变呢? 500分的问题!!!如何解决SkinLookandFeel的中文显示问题??
public Talker getTalker() {
return this;
} public void SayHello() {
System.out.println("你好!");
} public void SayByeBye() {
System.out.println("再见!");
}
}
其余两个类也这样改一下。
你只是在匿名内部类里面实现了接口的方法,而你的匿名内部类只是那三个类的一个新的方法,构不成对接口方法的重写。
void SayHello(); void SayByeBye();
}class Chinese implements Talker {
public Talker getTalker() {
return new myTalker();
} class myTalker implements Talker {
public void SayHello() {
System.out.println("你好!");
} public void SayByeBye() {
System.out.println("再见!");
} }
}实际上重写接口两个方法的是 myTalker类,而不是 Chinese类.如果你要使用Talker类的方法, Chinese不需要实现接口,因为内部已经有一个实现类 myTalker了,所以只要这样就行了public class Test {
public static void main(String[] args) {
Talker t = new Chinese().getTalker();
t.SayHello();
t.SayByeBye();;
}
}interface Talker {
void SayHello(); void SayByeBye();
}class Chinese {
public Talker getTalker() {
return new myTalker();
} class myTalker implements Talker {
public void SayHello() {
System.out.println("你好!");
} public void SayByeBye() {
System.out.println("再见!");
} }
}