package test; public class Father { static{ System.out.println("I am Father"); } public Father() { super(); System.out.println("Father Create"); } }
package test; public class Son extends Father{ static{ System.out.println("I am Son"); } public Son() { super(); System.out.println("Son Create"); } public Son(int s) { super(); System.out.println("Son Create with param: int"); } public static void main(String[] args) { Son s = new Son(); } }
package test; public class GrandChild extends Son { static{ System.out.println("I am GrandChild"); } public GrandChild() { super(); System.out.println("GrandChild Create"); } public GrandChild(int s) { super(s); System.out.println("GrandChild Create with param: int"); } public GrandChild(long s) { this((int)s); System.out.println("GrandChild Create with param: long"); } public static void main(String[] args) { GrandChild gc = new GrandChild(3l); } }
运行以下代码
public static void main(String[] args) { GrandChild gc = new GrandChild(); }
结果为:
I am Father I am Son I am GrandChild Father Create Son Create GrandChild Create
运行以下代码
public static void main(String[] args) { GrandChild gc = new GrandChild(3); }
结果为
I am Father I am Son I am GrandChild Father Create Son Create with param: int GrandChild Create with param: int
运行以下代码
public static void main(String[] args) { GrandChild gc = new GrandChild(3L); }
结果为:
I am Father I am Son I am GrandChild Father Create Son Create with param: int GrandChild Create with param: int GrandChild Create with param: long
以上:
1 类中的静态对象先于static{}执行
2 static{}中的代码是在构建类对象之前执行的
3 构造子类的时候是按照先父后子的顺序执行的
4 如果在子的构造函数中并没有使用显式的调用父类的构造函数(使用super),则执行无参构造函数。
5 如果使用this(),则会先调用this(),再调用下面的代码(此时父类别的默认构造函数不再执行,而会根据执行this()执行相应的父构造函数)
相关推荐
当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...
遵循正确的构造顺序不仅有助于避免常见的编程陷阱,还能确保类和对象的正确初始化,从而提升程序的稳定性和性能。通过以上步骤的分析,我们可以更加深刻地认识到Java语言设计的严谨性和灵活性,同时也提醒我们在实际...
Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 继承与static 面试题目如下:请写出程序执行完成之后的结果。 package extend; public class X { Y y=new Y(); ...
在Java编程语言中,继承是面向对象特性的重要组成部分,它允许一个类(子类)从另一个类(父类)继承属性和方法。了解Java中继承关系的加载顺序对于理解和优化程序性能至关重要。以下是对这个主题的详细阐述: 1. ...
在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...
### Java继承习题知识点解析 #### 一、基础概念与选择题分析 1. **final修饰的方法** - **题目**: 若在某一个类定义中定义有如下的方法:`final void workDial()`该方法属于 - A. 本地方法 - B. 最终方法 - C....
本文将通过具体的代码示例,详细解析Java类的基本运行顺序,帮助开发者更好地掌握程序执行逻辑,从而提高编程效率。 #### 示例一:简单类的运行顺序 考虑以下Java类`Test`: ```java public class Test { ...
本文将深度剖析几个常见的Java面试题目,包括方法重写、静态代码块和构造方法的执行顺序。 首先,我们来讨论**方法重写(Override)**。在面向对象编程中,子类可以继承父类的属性和方法,有时需要根据自己的需求对...
Java继承关系下的构造方法调用详解 Java继承关系下的构造方法调用是Java语言中一个非常重要的概念,它关系到类的继承和对象的实例化。在Java中,创建一个类的对象时,如果该类存在父类,则先调用父类的构造方法,...
2. **构造函数调用顺序**:在子类构造函数中,必须先调用父类的构造函数(使用`super`),然后再执行子类构造函数中的其他代码。 3. **构造函数的可访问性**:子类只能访问具有相同或更宽松访问级别的父类构造函数。...
在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...
1继承的概念 2继承的实现 3变量隐藏与方法覆盖 4super关键字 5 子类的构造顺序 6Object类 7 final关键字
5. 创建子类对象时,会按照一定的顺序进行初始化:首先是默认初始化,然后绑定构造方法参数,接着调用父类构造函数,最后执行实例变量的显性初始化和构造方法的主体代码。 接口在Java中是一种完全抽象的类,它只...
### Java中的继承(子类调用父类构造方法) #### 一、继承的基本概念 Java是一种支持面向对象编程的语言,其中“继承”是一项核心特性。继承允许创建一个新的类(称为子类或派生类),该类继承了现有类(称为父类...
即使如此,父类的构造方法和静态块仍然会按顺序执行,因为这是继承的固有特性。 总结一下,Java中子类继承父类时的程序运行顺序是: 1. 父类的静态变量和静态块 2. 子类的静态变量和静态块 3. 父类的非静态代码块 ...
当一个类继承自另一个类时,子类的构造方法可以使用`super`关键字调用父类的构造方法,确保父类的状态得到正确初始化。例如: ```java public class Student extends Person { private String major; public ...
在类的继承结构中,构造方法的调用顺序遵循自底向上的原则,即从最底层的子类开始,逐级向上调用父类的构造方法,直到到达最顶层的基类(通常是`Object`类)为止。这一过程确保了所有层次上的初始化逻辑都被正确执行...
理解这些概念对于编写正确的Java继承代码至关重要。确保在设计类结构时,考虑好如何初始化对象,以及子类如何利用父类的构造函数来完成初始化过程。合理使用`super`关键字可以有效地控制对象的构建流程,避免可能...
构造函数的执行顺序 **概念:** 当子类创建对象时,会首先执行父类的构造函数,然后再执行子类的构造函数。这是为了确保父类的初始化逻辑能够先于子类执行。 **选择题示例:** 第13题中,正确答案是A选项:“Father...
在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会有一个特定的初始化顺序。这个顺序通常遵循以下步骤: 1. **基类静态成员初始化**:如果基类中有任何静态成员,则会在程序启动时按照...