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

本文接上篇——34、类的继承。

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

如果子类中没有显式调用父类的构造方法,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学习——30.构造方法举例

    构造方法作为初始化成员变量的方法,完全掌握非常重要. 虽然Java虚拟机会自动匹配构造方法,但作为自己写程序的程序猿们,还是要非常熟悉地知道调用的到底是哪一个构造方法. 1.调用默认构造方法 当类中没 ...

  • java学习——29.构造方法

    封装是面向对象的核心特性,是信息隐藏思想的具体实现技术. Java提供构造方法.析构方法.方法重载.设置访问控制权限等措施对类进行封装. 今天介绍构造方法. 1.构造方法 类的构造方法用于创建类的一个 ...

  • Java学习-注解和反射

    注解 java.Annotation Annotation的作用:可以呗其他程序读取 Annotation的格式 注解是:@注释名 在代码中存在,还可以添加一些参数 ​@SuppressWarning ...

  • Java学习-多线程

    多线程 任务(Task).进程(Process).线程(Thread) 进程的创建 1.继承Thread类 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用sta ...

  • Java学习-Mybatis

    Mybatis Maven依赖: <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependenc ...

  • Java 学习笔记

    您对计算机(电脑)有了解吗? 计算机组成 系统软件 直接和硬件交互的软件叫系统软件,例如 win7.win8.Linux.mac等操作系统 应用软件 通常在运行在系统软件上,也就是在系统软件上开发的软 ...

  • 子类的构造方法

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

  • Java学习-126.2048代码

    本篇帖的是按钮的代码. 因为按钮比较多,包括菜单项的动作,为了区分,我用了两个内部类来实现这两部分代码. //本类是Game_2048类的内部类,用来实现上.下.左.右四个按钮,以及重新开始和退出游戏 ...

  • Java学习—125.2048代码

    本篇帖的是部分动作代码. 每个方法前都有注释说明本方法的功能. //随机选取一个位置,并填入数字2.如果此位置中已有数字,那么换一个位置. public void rule(){ x=ran.next ...