Java:当超级构造函数需要参数时如何初始化子级
发布时间:2020-12-14 05:50:18 所属栏目: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),那么我可以将结果
我有
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-ee – 处理Java EE和java.endorsed.dirs的最佳实践?
- spring boot+mybatis 多数据源切换(实例讲解)
- 尝试使用Calimero Java Library通过WiFi连接时出现“androi
- java – log4j.xml配置的常用变量
- Java Stream Collectors.toList()不会编译
- java – Apache POI超出了GC开销限制
- 为什么Java声称在涉及有界泛型时有2个声明的方法?
- Spring boot web程序static资源放在jar外部
- 是否更快(或更好)在Java中声明数组内联?
- java – jdb中的文本导航无法在bash中工作