Java类,其字段只能由其子类访问(没有getter/setter)?

Jay*_*Jay 5 java

我真正想要的是一个带有泛型构造函数的类,当调用子类的相同构造函数时,子类可以访问相同的字段.这是我想做的一个例子:

public abstract class Command{
    private Mediator m

    public Command(Mediator med){
       m = med;
    }

    abstract void exec();
}

public class FoobarCommand extends Command{
    public FoobarCommand(Mediator med){
        super(med);
    }

    public void exec(){
        med.doAFoobar()
    }
 }

public static void main(String[] args){
    Mediator m = new Mediator();
    Command c = new FoobarCommand(m);
    c.exec();
}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,因为FoobarCommand没有直接访问Mediator med.那么你将如何访问med领域?我不希望除了子类之外的任何人都可以访问它,并且"protected"不是一个选项,因为我希望人们能够创建自己的命令(显然这些命令在包之外).

And*_*yle 13

严格来说,实际上没有这样的访问修饰符.声明只能访问子类的字段(或方法/类)是不可能的; 您可以使用的限制性最强的修饰符protected,它仍允许访问父类包中的其他类.

但除此之外,protected还有其他方法.

编辑:澄清受保护一种选择.访问受保护的方法,你必须要么一个子类同一包中; 你不必两个都是.因此,Command在不同的包中创建的子类仍然可以访问(super).m.


Lan*_*ing 5

声明Mediator Med为"受保护"而非私人.