`
cakin24
  • 浏览: 1336905 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

子类构造器调用父类构造器的顺序问题

    博客分类:
  • java
阅读更多

一 super调用父类构造器

  • 子类构造器总会调用父类构造器。
  • 如果子类构造器没有显示使用super调用父类构造器,子类构造器默认会调用父类无参构造器。
  • 创建一个子类实例时,总会调用最顶层父类构造器。

二 构造器调用顺序示例

1 代码示例

class Creature
{
	public Creature()
	{
		System.out.println("Creature无参数的构造器");
	}
}
class Animal extends Creature
{
	public Animal(String name)
	{
		System.out.println("Animal带一个参数的构造器,"
			+ "该动物的name为" + name);
	}
	public Animal(String name , int age)
	{
		// 使用this调用同一个重载的构造器
		this(name);
		System.out.println("Animal带两个参数的构造器,"
			+ "其age为" + age);
	}
}
public class Wolf extends Animal
{
	public Wolf()
	{
		// 显式调用父类有两个参数的构造器
		super("大灰狼", 3);
		System.out.println("Wolf无参数的构造器");
	}
	public static void main(String[] args)
	{
		new Wolf();
	}
}

2 运行结果

Creature无参数的构造器

Animal带一个参数的构造器,该动物的name为大灰狼

Animal带两个参数的构造器,其age为3

Wolf无参数的构造器

3 结果分析

从运行结果来看,创建任何对象总是从该类所在继承树最顶层的构造器开始执行,然后依次向下执行,最后才执行本类的构造器,如果其个父类通过this调用同类中的构造器,就会依次执行父类的多个构造器。

0
1
分享到:
评论

相关推荐

    子类对象构建调用父类的构造方法

    程序中描述了子类对象构建调用父类的构造方法,以及类变量和实例变量创建的不同过程

    super和this之间的区别.docx

    因为一般子类构造器的首行会默认调用父类空构造的问题,所以建议模板类都至少存在一个空构造 super()必须在首行调用使用才行 2.区分子父类同名问题 如果当子父类中存在同名成员的时候,子类中使用同名...

    JAVA经典继承与父类调用 geter、seter访问器 构造器

    代码中设计了各个类的基类,设置私有成员变量,利用构造器对成员变量初始化,用geter、seter访问器设置、获取成员变量的值。继承基类并创建对象,在子类中调用父类方法。

    【04-面向对象(上)】

    •如果子类构造器没有显式使用super调用父类构造器;子类构造器默认会调用父类无参数的构造器。 •创建一个子类实例时,总会先调用最顶层父类的构造器。 多态性 •Java 引用变量有两个类型:一个是编译时的...

    10Java对象的内存布局1

    // Foo 类构造器会调用其父类 Object 的构造器1 invokespecial java.lang.Object() [8]然后,子类的构造器需要调用

    构造函数的继承问题 笔记

    子类如果有多个构造函数的时候,父类要么没有构造函数,...让编译器自动产生,那么在执行子类构造函数之前先执行编 译器自动产生的父类的缺省构造函数;要么至少要有一个显 式的缺省构造函数可以让子类的构造函数调用。

    Java中子类和父类之间的调用关系

     4、编译器会在每个构造方法的第一行隐式添加父类的默认无参构造器,即添加super()。  新手容易犯的错误: class Employee extends Object {  public Employee(int id) {  } } class Teacher extend

    Vue.extend构造器的详解

    也就是预设了部分选项的Vue的实例构造器,它常常服务于Vue.component用来生成组件,可以简单理解为当在模板中遇到该组件作为标签的自定义元素时,会自动调用“扩展实例构造器”来生产组件实例,并挂在到自定义元素上...

    JAVA之抽象类与接口的区别

     它可以有构造器,但是不能构造对象,抽象类中的构造器,在构造具体子类对象时调用,抽象方法决定抽象类,抽象类中可以没有抽象方法,具体父类型可以作为引用类型的声明;抽象父类型也可以作为引用类型的声明;...

    Java复习题及答案

    3、所有类至少有一个构造器,构造器用来初始化类的新对象,构造器与类同名,返回类型只能为void。 ( ) 4、包是按照目录、子目录存放的,可以在程序中用package定义包,若没有package一行,则表示该文件中的类不...

    java 程序设计试题及答案(8套合辑)

    C、构造方法不能被程序调用,也不可以重载。 D、一个类只允许有一个构造方法。 8.若需要定义一个类域或类方法,应使用哪种修饰符? A、static B、package C、private D、public 9.如要抛出异常,应用下列哪...

    计算机(专升本)Java程序设计复习资料.doc

    接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法, 而接口中不能定义构造器而且其中的方法全部都是抽象方法。 抽象类中的成员可以是private、默认、protected、public的,而接口中的...

    零基础Java入门编程【day7】

    文章目录继承与多态继承单继承方法的重写super关键字调用父类的构造器super和this的区别简单类对象的实例化过程子类对象的实例化过程面向对象特征——多态虚拟方法调用(Virtual Method Invocation)小结[instanceof ...

    html中创建并调用vue组件的几种方法汇总

    作者:Echoyya ... 用法:使用基础 Vue 构造器,创建一个“子类”。参数是一个包含组件选项的对象。data 选项是特例,需要注意 – 在 Vue.extend() 中它必须是函数 extend 创建的是 Vue 构造器,而

    java编程练习题

    2.无参构造器,将height和width都初始化为1.0 3.构造器,对height和width进行初始化 4.构造器,对x、y、height、width进行初始化 5.draw()方法,输出"draw in rectangle"和x,y,height,width的值 使用ShapeTest类...

    突破程序员基本功的16课.part2

    2.2 父类构造器 2.2.1 隐式调用和显式调用 2.2.2 访问子类对象的实例变量 2.2.3 调用被子类重写的方法 2.3 父子实例的内存控制 2.3.1 继承成员变量和继承方法的区别 2.3.2 内存中子类实例 2.3.3 父、子类的...

    modifRPG_Agil_Siti

    上级:班级项目构造器项更改为content方法,因为当父类具有构造器而子类具有其他构造器时发生错误。 b。 在getAksi()方法中,添加了System.out.println(getNama()),以便在运行程序时可以将每个项目名称写入...

    java面试800题

    "类的初始化过程 当创建一个对象时,对象的各个变量根据其类型被设置为相应的默认初始值,然后调用构造方法,而每次调用构造方法都是要执行三个阶段: 1.调用超类的构造方法; 2.由初始化语句对给变量进行初始化...

    Java开发技术大全(500个源代码).

    invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods....

Global site tag (gtag.js) - Google Analytics