类中嵌套了一个private权限的接口,可以写这样的代码却不可以调用这个private接口的方法?为什么?郁闷! 接口不能为private的,默认是public的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to 楼上:接口中的成员只能是public ,但接口在其它类(或接口)中定义时接口本身可以是private private interface D{ void f() ; }就是这个private的问题。a.getD() 正确是因为public D getD(),这里是公有的。它返回了一个DImp2,虽然DImp2是公有的,但是它的偏偏它的接口是私有的,正好f()又是这个私有接口定义的,所以报错。这个私有接口在class AAA的范围内才有效。而你是在范围外使用的。如果改一下,public interfaces D { void f(); }private class DImp2 implements D{ public void f(){}}就是把DImp2改成私有的,这反而是可以的。因为这个类尽管是私有的,但是它是在class AAA的范围内创建的,外部引用它的公有方法,这当然就不成问题了。 zengpan_panpan 正解!有一点不明白,xyjbn(无聊也是一种错)为什么要这么狠? a.getD().f(); //这行错误的原因是:a.getD() 返回的是一个D类型的对象,其实在方法中public D getD(){ return new DImp2();}系统进行了上溯造型,把DImp2类型的对象造型成一个D类型的对象,而你定义的private interface D{ void f();}又是私有类型,所以造成AAA.D不可见,这个问题主要是访问控制的错误。 windows下如何构造出linux的路径 高分求教Oracle公司笔试答案 请教java中路径的问题! 请教一个简单的算法问题 求一个排列的算法(从M的N次方),高手指点下 如何实现一个JDialog没有边框,并且可以托大大小? 请介绍一下java 的混淆器的用法,如jade,joc等 请wolfsquare(狼平方)进来领分 问一个很菜的问题,请高手们帮忙解决一下。一定给分!!! 如何让JTable单元格的文本被修改后改变为指定的颜色 帮我看看----------------实在找不出那里有问题! 静态方法getClass()怎么用?
void f() ;
}
就是这个private的问题。
a.getD() 正确是因为public D getD(),这里是公有的。
它返回了一个DImp2,虽然DImp2是公有的,但是它的偏偏它的接口是私有的,正好f()又是这个私有接口定义的,所以报错。这个私有接口在class AAA的范围内才有效。而你是在范围外使用的。如果改一下,
public interfaces D { void f(); }
private class DImp2 implements D{
public void f(){}
}
就是把DImp2改成私有的,这反而是可以的。因为这个类尽管是私有的,但是它是在class AAA的范围内创建的,外部引用它的公有方法,这当然就不成问题了。
public D getD(){
return new DImp2();
}
系统进行了上溯造型,把DImp2类型的对象造型成一个D类型的对象,而你定义的
private interface D{
void f();
}
又是私有类型,所以造成AAA.D不可见,这个问题主要是访问控制的错误。