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