喜悦国际村's Archiver

maqilin781 发表于 2004-5-6 11:49 PM

望大家不吝赐教,愚人有一点不明白

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中是不是也会调用它的父类的默认构造函数呢?
按照上面的解释是应该如此的.但是它的父类中也没有空的构造函数呀?

gawk 发表于 2004-5-7 01:59 AM

默认构造的意思

类体内如果没有定义任何构造方法
编译器会给类加入一个默认的构造方法
这个构造方法为 public 类名(){}

l乐天 发表于 2004-5-7 07:57 PM

A中如果有有参数的构造函数了,那么编译器就不会自动加那个默认的空构造函数了。
并且如果只有有参数的构造函数,那么子类中如果没有定义构造函数,那么他就super,因此他super()不到没有参数的构造函数。注意这里是super(),因为是默认的,所以是必须无参数的。

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.