已知有两个接口如下所示,要求定义一个类,其中包含两个内部类,这两个内部分别实现这两个接口,且设为private,在类中分别定义两个方法,可以返回这两个接口。 
public interface Destination { String readLabel();}   
public interface Contents { int value();} 
我的程序如下: 
public class OutClass 

  private class InnerClass1 implements Destination 
  { 
    public String readLabel() 
    { 
      return "InnerClass1 String readLabel()"; 
    } 
  } 
  private class InnerClass2 implements Contents 
  { 
    public int value() 
    { 
      return 8; 
    } 
  } 
  public Destination getInnerClass1() 
  { 
    Destination class1 = new InnerClass1(); 
    return class1; 
  } 
  public Contents getInnerClass2() 
  { 
    Contents class2 = new InnerClass2(); 
    return class2; 
  } 
  public static void main(String[] args) 
  { 
    Destination classDemo1 = new OutClass().getInnerClass1(); 
    System.out.println(classDemo1.readLabel());     Contents classDemo2 = new OutClass().getInnerClass2(); 
    System.out.println(classDemo2.value()); 
  } 
} 可是我把里面的两个内部类同时实现这两个接口就出现编译错误了,我修改后的代码是这样的: 
public class OutClass 

  private class InnerClass1 implements Destination, Contents 
  {     public String readLabel() 
    { 
      return "InnerClass1 String readLabel()"; 
    }     public int value() 
    { 
      return 8; 
    } 
  }   private class InnerClass2 implements Destination, Contents 
  {     public String readLabel() 
    { 
      return "InnerClass2 String readLabel()"; 
    }     public int value() 
    { 
      return 8; 
    } 
  }   public Destination getInnerClass1() 
  { 
    Destination class1 = new InnerClass1(); 
    return class1; 
  } 
  public Contents getInnerClass2() 
  { 
    Contents class2 = new InnerClass2(); 
    return class2; 
  }   public static void main(String[] args) 
  { 
OutClass outClass = new OutClass(); 
Destination destination = outClass.getInnerClass1(); 
System.out.println(destination.readLabel()); 
System.out.println(destination.value()); Contents contents = outClass.getInnerClass2(); 
System.out.println(contents.readLabel()); 
System.out.println(contents.value()); 
    /** 
       InnerClass1 classDemo1 = new InnerClass1(); 
       System.out.println(classDemo1.readLabel()); 
       System.out.print("InnerClass1 int value()"); 
       System.out.println(classDemo1.value());        System.out.println();        InnerClass2 classDemo2 = new InnerClass2(); 
       System.out.println(classDemo2.readLabel()); 
       System.out.print("InnerClass2 int value"); 
      System.out.println(classDemo2.value()); 
   */ 
  } 
}
编译器报错信息如下: OutClass.java:47: 找不到符号 
符号: 方法 value() 
位置: 接口 Destination 
        System.out.println(destination.value()); 
                                      ^ 
OutClass.java:50: 找不到符号 
符号: 方法 readLabel() 
位置: 接口 Contents 
        System.out.println(contents.readLabel());

解决方案 »

  1.   

    因为你classDemo1声明为Destination 接口的对象
    而Destination接口没有value()这个方法另外一个错误同样道理
      

  2.   

     private class InnerClass1 implements Destination  
      {  
        public String readLabel()  
        {  
          return "InnerClass1 String readLabel()";  
        }  
      }  
      private class InnerClass2 implements Contents  
      {  
        public int value()  
        {  
          return 8;  
        }  
      }  拜托你为1定义的readLabel,为2定义的value,结果1调用的是value,2调用的是readLabel……
      

  3.   

    public Destination getInnerClass1()  
    {  
      Destination class1 = new InnerClass1();  
      return class1;  
    }  
    问题是getInnerClass1()的时候返回了Destination.