Java:当超级构造函数需要参数时如何初始化子级

前端之家收集整理的这篇文章主要介绍了Java:当超级构造函数需要参数时如何初始化子级前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有
class A {

    int var;
    public A(int x) {
        var = x;
    }
}


class B extends A {
     int var2;

     public B(int x,int y) {
         super(...);
         var2 = y;
         x = f(y);
     }
 }

对于子类B,我需要计算在A的构造函数中使用的值x.如果我可以自由移动超出我的x = f(y),那么我可以将结果传递给A的构造函数(超级).但是super必须是B构造函数中的第一行.

有没有办法在第一次用适当的值初始化A?怎么样的A.var是最终的,我不能回去并在施工后改变它?

当然,我可以把超级(f(y)),但我可以想象这会变得困难的情况.

解决方法

假设var是私有的,你需要用构造函数设置值(这似乎是问题的关键点,否则有很多简单的解决方案),我只想用类似静态工厂的方法来做.
class B extends A {
     int var2;

     public static B createB(int x,int y) {
         x = f(y);
         return new B(x,y);
     }

     public B(x,y) {
         super(x);
         this.var2 = y;
     }
 }

类似的东西.您没有选择,因为显式构造函数调用必须发生在包装构造函数的第一行.

猜你在找的Java相关文章