首先,这个问题的答案是:错误。
构造方法是用来创建一个实例的,或者说是创建一个对象。
如果类本身没有写构造方法,为了让类能拥有面向对象的能力,那么开发工具会默认添加一个"不可见的"构造方法,其实就是无参构造方法:
class Car
{
public void color()
{
System.out.print("I have color!");
}
}
public class Test1{
public static void main(String[] args) {
Car car=new Car(); //调用自动产生的无参构造方法
car.color();
}
}
结果为:
I have color!
但是,如果类本身创建了一个构造方法,那么系统将不会再为他创建无参构造方法。
在有构造方法的时候:
class Car
{
int length;
Car(int length)
{
this.length=length;
}
public void color()
{
System.out.print("I have color!");
}
}
public class Test1{
public static void main(String[] args) {
Car car=new Car(); //会报错:The constructor Car() is undefined 即:该Car()构造法没有被定义
car.color();
}
}
所以,在有构造方法的时候,系统不会再生成无参构造法,如果你想要,需要自己去创建。一般情况为了防止错误发生,类最好创建一个无参构造,原因下面会讲。
class Car //父类
{
int length;
Car(int length)
{
this.length=length;
}
public void color()
{
System.out.print("I have color!");
}
}
class BMW extends Car //子类,该行出现异常:Implicit super constructor Car() is undefined for default constructor. Must define an explicit constructor
{ //原因:找不到父类的Car()构造方法。
}
public class Test1{
public static void main(String[] args) {
BMW car=new BMW();
car.color();
}
}
异常原因:因为BMW没有构造方法,所以是默认无参构造,即
BMW()
{
super();
}
其中super();是继承父类的无参构造,也是"不可视"的。super();会在每个子类构造方法中都调用,即使你将子类添加一个构造方法,依旧会有那个异常。
解决办法:
- 在父类中手动添加一个无参构造方法。
- 在子类创建一个构造方法,然后用super调用父类的构造方法。