在java教程中,
http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html
您不必为您的班级提供任何构造函数,但在执行此操作时必须小心。编译器自动为没有构造函数的任何类提供无参数的默认构造函数。此默认构造函数将调用超类的无参数构造函数。在这种情况下,如果超类没有无参数构造函数,编译器将会抱怨,因此您必须验证它是否存在。如果你的类没有显式的超类,那么它有一个隐式的超类Object,它有一个无参数的构造函数。
任何人都可以向我提供一个示例,其中可能存在编译错误吗?
答案 0 :(得分:2)
class A
{
public A(int n)
{
}
}
class B extends A
{
}
答案 1 :(得分:2)
class A
{
int a;
A(int a)
{
this.a=a;
}
}
class B extends A
{
B(int a)
{
this.a=a;
}
}
class C
{
public static void main(String args[])
{
B obj=new B(20);
System.out.println("a = "+obj.a);
}
}
Error:Constructor A in class A cannot be applied to given types;
{
^
required: int
found:no arguments
reason: actual and formal argument lists differ in length
答案 2 :(得分:1)
假设您有一个Super
班级
class Super {
// no constructor
// Java compiler will assign a default constructor
// Super () {}
}
和Child
类
class Child extends Super {
public Child() {
//super(); --> this statement will be inserted by default by Java compiler, even though you don't put it in your code
}
}
如果Super
是这样的话
class Super {
Super(int a) {
// Now this is the only constructor Super class has
// Java doesn't insert a default constructor now..
}
}
Child
不能没有参数构造函数,因为Super
不再拥有它
class `Child` {
Child() {
// super();
//this will be error since there is no "no-argument" constructor in Super
}
}