假如我定义一个子类继承了父类.那子类有没有继承父类的构造函数呢?编译不通过而如果调用父类的函数就可以了如:super("",20);请问这是为什么???谢谢
public class Person
{ String name;
int age;
Person(String n,String a)//构造函数
{
name=n;
age=a;
}
}
class Student extends Person //继承了父类.包括了函数name,age
{
public static void main(String args[])
{
}}
public class Person
{ String name;
int age;
Person(String n,String a)//构造函数
{
name=n;
age=a;
}
}
class Student extends Person //继承了父类.包括了函数name,age
{
public static void main(String args[])
{
}}
但如果你在子类的构造函数中不明确写super调用,编译器会做一件事,相当于自动生成这个调用。
就是说,父类中如果有不带参数的构造方法,那么子类也会存在一个不带参数的构造方法.当然子类中的构造方法可以写,可以不写.(其实你不写的时候系统会自动帮你写上).
一旦父类中的构造方法存在参数,那么子类必须写一带参数的构造方法. 父类有了有参构造函数就不存在默认无参构造函数了
Person(){
}
就行了
虽然子类并不继承父类的构造器
但是他会调用父类的构造器的构造器的
所有写一个默认的构造器就不会报错的
class Person
{ String name;
int age;
Person()
{
name="name";
age=0;
}
Person(String n,int a)//构造函数
{
name=n;
age=a;
}
}
public class Student extends Person //继承了父类.包括了函数name,age
{
public static void main(String args[])
{
Student st=new Student();
System.out.println(st.name+"\n"+st.age);
}}
创建子类对象时,系统会调用子类的构造方法,编译器也会自动的在子类构造方法中插入对父类构造方法的调用,当父类没有构造方法时,编译器也会自动生成一个默认的构造方法,子类也是这样,但是当你定义了父类的构造方法里,系统就不会生成默认的构造方法了,这时,自动调用就不可以了,你要用super关键字来调用父类的构造方法.
---------------------------------------------------------------------------
这句话有一个问题,如果父类没有构造函数或者有一个没有参数的构造函数,那么编译器会在编译时在子类中自动加上一个无参数构造函数,同时调用super();
如果父类有带参数的构造函数,那么子类必要定义一个构造函数同时调用一个父类的构造函数来初始化父类,不然编译器不能确定该使用哪个构造函数来初始化弗雷,导致编译不能通过。
子类并没有继承父类的构造方法,而是在实例化子类对像时先调用父类的构造方法