嗨,我有一个这样的程序。
接口
package Sarvari.pack1;
public interface Inter
{
void f();
}
外部类和内部类:
package Sarvari.pack2;
import Sarvari.pack1.*;
public class Outer
{
protected class Inner implements Inter
{
Inner() {//only public is working not protected or default;
System.out.println("constructor of inner class");
}
public void f(){
System.out.println("f method in inner class");
}
}
}
扩展外部类的类:
package sarvari;
import sarvari.pack2.*;
import sarvari.pack1.*;
public class Coffee extends sarvari.pack2.Outer{
public Inter met(){
return new Inner();
}
public static void main(String[] args){
new Coffee().met().f();
}
}
我的问题是
为什么我必须将Inner类的构造函数声明为public?为什么我不能默认访问它?
如果内部类的受保护访问权限来自构造函数,那么即使我将访问权限保留为构造函数的保护程序,它也无法正常工作......只有公共工作。有人可以解释这种行为吗?
答案 0 :(得分:0)
您的问题是,Coffee
位于另一个包中,而不是Inner
。另一个包Coffee
只能访问public
的{{1}}个成员,因为它不是Inner
的儿童类。
另一个问题是名为 java 的包。禁止使用它。为自定义类使用其他名称。
您可以使用此Inner
类作为解决方法,如果您需要从Coffee
访问Inner
- 构造函数,但又不想将其公开:
Coffee