望大家不吝赐教,愚人有一点不明白
class A{
A(int i)
{
System.out.println("i="+i);
}
}
class B extends A
{
}
编译时会报错如下:
cannot resolve symbol
symbol : constructor A()
location: class A
public class B extends A
^
1 error
Tool completed with exit code 1
有的高手解释说是:
类B的构造函数为默认的构造函数,编译器会在该函数体中自动加入
Super();即对父类构造函数的调用,但是父类中没有参数为空的构造函数,所以会报错.
在看下面的程序:
class Modem
{
int speed=10;
public void displaySpeed()
{
System.out.println("Speed: " + speed);
}
}
public class CableModem extends Modem
{
public static void main(String [] args)
{
System.out.println("Connecting to the internet.....");
System.out.println("Using" );
}
}
保存为CableModem.java然后编译通过
类CableModem中是不是也会调用它的父类的默认构造函数呢?
按照上面的解释是应该如此的.但是它的父类中也没有空的构造函数呀?
默认构造的意思
类体内如果没有定义任何构造方法编译器会给类加入一个默认的构造方法
这个构造方法为 public 类名(){} A中如果有有参数的构造函数了,那么编译器就不会自动加那个默认的空构造函数了。
并且如果只有有参数的构造函数,那么子类中如果没有定义构造函数,那么他就super,因此他super()不到没有参数的构造函数。注意这里是super(),因为是默认的,所以是必须无参数的。
页:
[1]
