//如:
public class father//父类
{
public father(String a)
{
}
}class son extends father//子类
{
public son(String b)//只能有这种构造函数吗?
{
super(b);
}
public son()//这样为什么编译不能通过?
{
String x="test";
super(x);
}
}
//以上问题怎么解决?
public class father//父类
{
public father(String a)
{
}
}class son extends father//子类
{
public son(String b)//只能有这种构造函数吗?
{
super(b);
}
public son()//这样为什么编译不能通过?
{
String x="test";
super(x);
}
}
//以上问题怎么解决?
{
String x="test";
super(x);
}
改成
public son()
{
super(x);
String x="test"; }你必须清楚的一点是,super构造函数永远要在其它的语句之前,否则,父类都没初始化,哪里来的内存可以存放String x呢
这个可以:
class Father//父类
{
public Father(String a)
{
}
}public class Test extends Father{
public static String x="Father";
public Test(String b)
{
super(b);
}
public Test()
{
super(x);
}
}
{
super(x);
String x="test"; }
这样编译能能过吗?x都还没定义怎么传递?public class Test extends Father{
public static String x="Father";
public Test(String b)
{
super(b);
}
public Test()
{
super(x);
}
}
这种方法虽然可以,但为什么我在调用父类的构造函数之前就不能产生其它对象呢?
或者 this("text");
不要着急~~
当一个类继承另一个类的时候,它调用构造函数,一般是先调用被继承哪个类的构造函数,如果父类中
没有带参数的构造函数的话,子类会调用默认的构造函数,就不许要Super(b);
如果你的父类有带参数的构造函数的话,这个带参数的构造函数就会覆盖默认的构造函数,这样,你的子类就必须会去调用带有参数的父类的构造函数。这样就需要Super(b)啦!
子类实例话的时候首先要实例话父类构造函数呀。
父类只有带参数的构造函数,那子类当然要使用super(xxx)来初始化。