嗨,我正在阅读对象声明,并遇到语句
如果父母没有构造函数(对象确实有一个),则编译器将拒绝该程序。
有人知道这意味着什么吗?
这是胡说八道。没有构造函数就不可能在Java中上课。我认为您的意思是:如果父类中没有默认构造函数。
儿童类的构造函数将(作为第一个语句)调用父类的默认构造函数。如果不存在,您将必须添加一个带有参数的明确调用,以匹配所在的构造函数。
public class Parent{
public Parent(String o){}
}
public class Child extends Parent{
public Child(String o){}
}
不会编译。儿童构造函数将寻找父母的默认构造函数,该构造者不存在。(顺便说一句,孩子的构造函数是否具有参数都没关系)。
因此,您将明确需要致电父母构造函数:
public class Parent {
public Parent(String o) {
}
}
public class Child extends Parent {
public Child(String o) {
super(o);
}
}
如果孩子只有一个默认的构造函数,那就是这样:
public class Child extends Parent {
public Child() {
super(null);
}
}
注意:NULL也可以被任何有效(硬编码)字符串值所取代。
如果父母没有构造函数(对象确实有一个),则编译器将拒绝程序
我认为您的误解是基础是您思考 是构造函数是继承的。实际上,构造函数是不是Java中继承的。因此,请考虑以下示例:
public class A {
public A(int i) { super(); ... }
}
public class B extends A {
public B() { super(); ... }
}
类A
:
- 不继承
Object
,
的任何构造函数 - 不明确声明一个no-args构造函数(即
public A() {...}
)和 - 没有默认的构造函数(因为它 dos 声明另一个构造函数)。
它有一个也只有一个构造函数: public A(int)
。
构造函数无需显式调用超类构造函数。但是很多人认为包括明确的电话是很好的风格。如果将其遗漏,Java编译器将插入对超类No-Args构造函数的隐式调用... ,如果不存在或不存在NO-ARGS构造函数或子类不可见,则会导致编译错误。