(关于私有内部类)为什么编译会出现编译错误

t427795737 2007-10-24 10:52:07
已知有两个接口如下所示,要求定义一个类,其中包含两个内部类,这两个内部分别实现这两个接口,且设为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());

...全文
101 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aunty_flybird 2007-10-25
  • 打赏
  • 举报
回复
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……
「已注销」 2007-10-25
  • 打赏
  • 举报
回复
因为你classDemo1声明为Destination 接口的对象
而Destination接口没有value()这个方法

另外一个错误同样道理
DGCDHT 2007-10-25
  • 打赏
  • 举报
回复
你的 两个接口中是不是有方法名相同的抽象方法啊?
aniude 2007-10-25
  • 打赏
  • 举报
回复
public Destination getInnerClass1()
{
Destination class1 = new InnerClass1();
return class1;
}
问题是getInnerClass1()的时候返回了Destination.

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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