如何在构造函数中使用超级(变量)实例化?

时间:2016-02-03 16:22:38

标签: java super

你好stackoverflow的人,

我不完全确定我的问题是否多余。但是,在构造函数中使用 super()实例化变量之后,您将如何使用 super(变量)在同一类的另一种方法中。我在某处读过如果您使用" 受保护"在父类中,您应该能够访问它,但我希望避免这样做。

示例:

public class test extends trial{
    public test (trial variable){
        super(variable);
    }

    public double testMethod(){
    return [super(variable)]; //This is where the super(variable) is going
    }
}

3 个答案:

答案 0 :(得分:0)

我认为Trail看起来有点像:

public class Trial {
   private final Trial variable;
   public Trail(Trial variable) {
      this.variable = variable;
   }
}

如果是这种情况,那么Test无法将super.variable variable更改为受保护(或更高)或拥有受保护(或更高)的获取者,则无法访问variableTrial。除此之外别无他法(1)。

  

在构造函数

中使用super()实例化变量之后

您不是(直接)实例化变量,而是在Trial上调用构造函数。然后load_and_enqueue(foo, bar, baz)中的构造函数实例化变量。

1)你可以用邪恶的hackory绕过这个。然而,在99%的情况下,这样做是错误的。

答案 1 :(得分:0)

你正在做的不是初始化变量,而是调用父类构造函数,即trial的构造函数。 如果子类受到保护或公开,则可以直接从子类访问它。 例如

public class A{
public int foo;
protected int foo2;
private int foo3;
}

public class B extends A{
public void someMethod()
{
foo=1;
foo2=3;
//foo3 cant be accessed because it is private. only and only class A can
//access it.

}
}

答案 2 :(得分:0)

如果你的超类没有公开你作为构造函数参数接收的东西并传入超类构造函数,你总是可以让子类自己引用它:

public class Test extends Trial {
    private Trial variable;
    public Test(Trial variable) {
        super(variable);
        this.variable = variable;
    }

    public void testMethod() {
        this.variable.doWhatever();
    }
}