解决方案 »

  1.   

    三个类都不要 implements Talker.
      

  2.   

    或者不用匿名类。public  class Chinese implements Talker{
    public Talker getTalker() {
    return this;
    } public void SayHello() {
    System.out.println("你好!");
    } public void SayByeBye() {
    System.out.println("再见!");
    }
    }
    其余两个类也这样改一下。
      

  3.   

    看了一下代码,首先你三个类都要实现Talker接口,但是你在三个类的方法当中返回了匿名类实例,这样一来是匿名类实现了Talker接口,而不是你定义的三个类,所以会报错!所以应该如同一楼说的三个类不要实现Talker这个接口。
      

  4.   

    接口里定义的方法只能是抽象方法(系统自动加abstract修饰符),你那三个类实现了Talker接口则必须实现接口里定义的全部抽象方法(即重写它们),否则该类将保留从父接口继承到的抽象方法,该类要定义成抽象类。
    你只是在匿名内部类里面实现了接口的方法,而你的匿名内部类只是那三个类的一个新的方法,构不成对接口方法的重写。
      

  5.   

    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("再见!");
    } }
    }
      

  6.   

    因为你的类是实现了Talker接口但是没有实现接口方法
      

  7.   

    匿名内在内部创建,他实现了Talker接口的方法,并不代表 外部主体类也实现了接口方法,所以你的外部主体类也要实现接口的方法