子类的构造方法

子类可以继承父类的除构造方法和析构方法以外的所有成员,在子类创建对象时,必须对父类的变量进行初始化。但构造方法是不被继承的,故要在子类当中调用父类的构造方法。

如果子类中没有显式调用父类的构造方法,Java默认调用父类无参数的构造方法。若父类没有不带参的构造方法,将出错。

本篇介绍继承时子类的构造方法。

1、        使用super()调用父类的构造方法

在子类中,可以使用“super引用”调用父类的构造方法。

其语法格式如下:

super([参数列表])

例如:在Student类中,其继承自Person类,其构造方法可声明如下:

public Student(){

super();//此处可省,调用父类无参数构造方法

number=123;

}

public Student(String name,int number){

super(name);//调用父类带参数构造方法

this.number=number;

}

2、        默认执行super()

有两种情况,Java会默认执行super。

(1)    当一个类没有声明构造方法时,Java为该类提供默认的构造方法,可默认调用父类super() 。

例:

class A{

int i;

public A(){

i=1;

}

public int getI(){

return i;

}

}

public class Add extends A{

public static void main(String args[]){

Add a=new Add();

System.out.print(a.getI());

}

}

此运行结果为:1。

本例中,Add类继承自A类,在A类中有构造方法A()不带参。在子类Add中,并没有构造方法,此时在创建Add的对象时,会自动调用super()不带参的构造方法,使i的值初始化为1,故输出为1。

(2)    如果子类的构造方法没有调用super()或this(),Java将默认执行super()。

例:

class A{

int i;

public A(){

i=1;

}

public int getI(){

return i;

}

}

//类Add,继承类A

public class Add extends A{

int j;

public Add(){

j=3;

}

public static void main(String args[]){

Add a=new Add();

System.out.print(a.getI()+""+a.j);

}

}

其运行结果为:1 3
本例中,Add继承自A类,在A类中有构造方法A(),在Add类中有构造方法Add()。但在子类Add中并没有显式调用父类的构造方法,其默认调用了父类不带参的构造方法,将i赋值为1,而在Add构造方法中将j赋值为3,故输出为1 和3。
在使用类的继承时,一定要注意是先创建父类对象再创建子类对象,因此在写子类的构造方法时,要分清它到底应该调用父类的哪一个构造方法,以免出错。

例:

class Person{

private String name;

public Person(){

this("张熹熹");

}

public Person(String name){

this.name=name;

}

publicvoid show(){

System.out.println("姓名:"+name);

}

}

public class Student extends Person{

private String number;

public Student(){

number="123";//默认调用父类的Person()

}

public Student(Stringnumber){

super();//调用父类的不带参构造方法

this.number=number;

}

public Student(Stringname,String number){

super(name);//调用父类带参的构造方法

this.number=number;

}

public void show(){//覆盖父类的方法

super.show();//调用父类的方法

System.out.println("学号:"+number);

}

public static void main(String args[]){

Student s1=new Student();

s1.show();

Student s2=new Student("645");

s2.show();

Student s=new Student("Lay","107");

s.show();

}

}

其运行结果为:

姓名:张熹熹

学号:123

姓名:张熹熹

学号:645

姓名:Lay

学号:107

(0)

相关推荐

  • 继承的使用,方法重写(覆盖),super关键字

    认识继承 不同类型的对象,相互之间经常有一定数量的共同点.例如,小明同学.小红同学.小李同学,都共享学生的特性(班级.学号等).同时,每一个对象还定义了额外的特性使得他们与众不同.例如小明的数学比较好 ...

  • 继承,重写,多态

    继承 继承的本质是对某一类的抽象,从而实现对现实世界更好的建模. extends的意思是"扩展",子类是父类的扩展 java中类只有单继承,没有多继承 继承是类和类之间的一种关系. ...

  • Java学习——35、子类的构造方法

    本文接上篇--34.类的继承. 子类可以继承父类的除了构造方法以外的所有成员,在子类创建对象时,必须对父类的变量进行初始化.但构造方法是不被继承的,故要在子类当中调用父类的构造方法. 如果子类中没有显 ...

  • Java子类实例化总是默认调用父类的无参构造方法

    2020-09-06 21:15:12 3点赞 Lucius_Keep_Going! 码龄3年 关注 继承关系的细节 子类拥有父类的属性和方法,但是对于父类的私有属性(private修饰),子类是无权 ...

  • Java中子类在实例化的时候调用父类的无参构造方法

    Java中子类在实例化的时候调用父类的无参构造方法

  • 为什么子类的构造器中要调用父类的无参构造方法,有什么意义?

    当一个子类调用构造方法时,我们知道它都会调用父类隐性的构造方法,如图: 但是,我发现一个问题,为什么要这样设计,为什么子类一定要调用到父类的无参构造方法,或者你可以选择调用其他有参的父类构造方法,这可 ...

  • 五星纪要之六十甲子类像

    甲子金,为宝物,喜金木旺地. 乙丑金,为顽矿,喜火及南方月时. 丙寅火,为炉炭,喜冬及木.(火力发电厂,奉献的) 丁卯火,为炉烟,喜巽地及秋冬.(巽为辰巳两地支,见酉多富贵伤残) 戊辰木,山林山野处不 ...

  • 考虑价格基期变化的实际GDP构造方法

    EV视点提出了一个考虑价格基期变化的实际GDP构造方法,也是我们在<一个适合中国宏观经济分析的数据集(持续更新-)>中采用的方法.该方法与查涛等[1]构造并维护的价格基期固定的实际GDP具 ...

  • 新闻传播类、财经类、法学类、计算机类、电子类专业就业前景

    高卡填报志愿时,都说女生的选择面很小,有些家长说,女孩子,以后找个稳定的工作就行了,不要求孩子有多大的能耐,当个老师,考个公务员就行了,选一些偏文科类的专业吧:而有些考生说,我以后想有个好发展,想要创 ...

  • 干姜附子类汤应用实例

    一.虚寒出血 许叔微医案:-妇人,得伤寒数日,咽干,烦渴,脉弦细.医者汗之,其始衄血,继而脐中出血,医者惊骇而遁.予曰:少阴强汗之所致也.盖少阴不当发汗,仲景云:"少阴强发汗,必动其血,未知 ...

  • 马新童:附子类方的临床运用(二)

    附子类方之大玄武汤与仲景附子汤 我们把辅行诀当中的大玄武汤与仲景的附子汤进行了一个对比,大玄武汤讲:治肾气虚疲,少腹中冷,腰背沉重,四肢冷清,其后有:小便不利,大便鸭溏,日十余行,气惙力弱者方.我们看 ...