如何解决如何停止强制子类实现父构造函数
让我们考虑以下类:
public abstract class Parent{
protected Parent(Object object){
/* ... */
}
}
还有下面一个:
public final class Child1 extends Parent{
public Child1(Object object){
super(object);
}
}
是否有任何通用方法可以停止在扩展父类的类中强制执行调用 super(object)
的构造函数,以便始终调用 Parent 构造函数?
我想知道,因为我将有一堆类扩展父类,并且所有这些类都将共享相同的构造函数,没有花哨的例外,所以我会节省时间(不是那么多,但我也是只是好奇)。
解决方法
子类总是必须调用其父类的构造函数之一。
即使在父类中的无参数构造函数的情况下也是如此:
class Parent {
Parent() {}
}
class Child extends Parent {
Child() {}
}
编译器会在子的构造函数中插入一个调用:
class Child extends Parent {
Child() {
super();
}
}
如果 Parent
类的构造函数都需要参数,则编译器不能假定它可以通过 Child
构造函数参数:
class Child extends Parent {
Child(Object first,Object second) {
super(???); // Which of the parameters do you pass here?
}
}
即使在只有一个 Child
构造函数参数的情况下,编译器也无法知道您是否真的想按原样传递那个参数,或者您是否真的打算传递从它派生的某个值(甚至不是):
Child(Object first) {
super(first);
}
Child(Object first) {
super(first + "");
}
Child(Object first) {
super("Hello world");
first.doThing();
}
这些(以及更多)中的每一个都是同样有效的选择。
编译器不知道你想要什么,所以你必须明确地告诉它。抱歉,没办法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。