问题:
子类继承父类,构造函数及公共属性的执行顺序是怎样的?
示例代码
public class A extends C {
B b = new B();
static H h = new H();
static {
System.out.println("this is static tack");
}
static void i() {
System.out.println("this is static metod");
}
public A() {
System.out.println("this is class A");
}
public static void main(String[] args) {
A a = new A();
}
}
class B {
public B() {
System.out.println("this is class B");
}
}
class C {
D d = new D();
static E e = new E();
final F e1 = new F();
static final G e2 = new G();
public C() {
System.out.println("this is class C");
}
}
class D {
public D() {
System.out.println("this is class D");
}
}
class E {
public E() {
System.out.println("this is class E");
}
}
class F {
public F() {
System.out.println("this is class F");
}
}
class G {
public G() {
System.out.println("this is class G");
}
}
class H {
public H() {
System.out.println("this is class H");
}
}
执行结果:
this is class E
this is class G
this is class H
this is static tack
this is class D
this is class F
this is class C
this is class B
this is class A
执行顺序:
1、实现父类公共的静态属性或静态的块级代码
2、实现本身的公共的静态属性
3、实现父类公共属性
4、执行父类的构造方法
5、实现本身的公共属性
6、执行本身的构造函数
7、静态方法不执行
补充:
当父类有多个构造函数,若子类用super(参数信息)指明调用父类有参数的构造函数,则不执行无参数的构造方法
分享到:
相关推荐
在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...
### 构造函数继承在Java中的应用 构造函数继承是面向对象编程中一个重要的概念,尤其是在Java这样的语言中。本文将深入探讨构造函数继承的概念、原理及其在Java中的实现方式。 #### 构造函数的基本概念 在Java中...
以下是关于Java构造函数继承问题的关键知识点: 1. **继承默认构造函数**: - 子类只能继承父类的无参数(默认)构造函数。如果父类没有无参数的构造函数,那么子类无法直接继承任何构造函数。 - 缺省构造函数是...
在Java中,构造函数可以被重载以提供不同的初始化方式,但它们不能被继承。这意味着,当一个类继承自另一个类时,子类不会自动继承父类的构造函数。为了确保子类能够正确地初始化其父类部分,需要特别注意构造函数的...
1. **基类构造器的调用**:如果类A继承自类B,那么在类A的构造函数执行之前,会先调用类B的构造函数。这是为了确保基类的部分先得到初始化。 2. **成员变量构造器的调用**:接着,按照声明的顺序,类A中每个成员...
在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...
以下是对构造函数继承问题的详细解释: 1. 缺省构造函数:每个类都有至少一个构造函数。如果没有显式定义,编译器会为类提供一个默认的无参数构造函数,称为缺省构造函数。这个构造函数不做任何事情,仅仅是存在的...
总的来说,理解和掌握构造函数、析构函数(以及在Java中的`finalize()`方法)、函数的重载、类的继承以及函数覆盖,对于提升Java编程能力至关重要。同时,设计模式的运用可以提高代码的可维护性和可扩展性,使得大型...
5. 创建子类对象时,会按照一定的顺序进行初始化:首先是默认初始化,然后绑定构造方法参数,接着调用父类构造函数,最后执行实例变量的显性初始化和构造方法的主体代码。 接口在Java中是一种完全抽象的类,它只...
3. **构造函数重载**:一个类可以有多个构造函数,只要它们的参数列表不同(参数个数、类型或顺序),这就是构造函数的重载。这样可以根据需要提供多种初始化方式。 4. **构造函数的调用**:当使用`new`关键字创建...
在多级继承关系中,静态代码块按照类的加载顺序执行,先加载的类先执行其静态代码块。 例如,在给定的代码中: ```java public class A { static { System.out.print(1); } public A() { System.out.print(2)...
总结一下,Java中的继承允许子类继承父类的构造函数。如果子类没有显式调用父类构造函数,那么会默认调用父类的无参构造函数。如果父类的构造函数有参数,可以通过`super`关键字在子类构造函数的第一行指定调用哪个...
当一个类实例化时,其构造函数(在Java中是`构造器`,在Python中是`__init__`方法)会被调用。在涉及继承的情况下,这个过程遵循一定的规则。 1. **初始化父类**: - 在子类创建实例时,首先会执行父类的构造函数...
总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...
构造函数链的顺序是从最顶级的父类到子类,依次调用。 5. **方法区**:也称为 PermGen 或 Metaspace(在Java 8及以后版本),存储类的元数据,包括类的静态变量和方法信息。对于继承来说,父类的静态变量在子类中是...
本文详细介绍了类继承中的初始化顺序问题,包括初始化的基本概念、初始化过程中的关键步骤以及如何正确处理基类和子类之间的构造函数调用。理解这些概念对于编写高效、可维护的面向对象程序至关重要。希望通过对这些...
在创建子类的对象时,将先执行继承自父类的无参构造函数,然后再执行自己的构造函数 - D. 子类不但可以自动执行父类的无参构造函数,也可以自动执行父类的有参构造函数 - **解析**: - 子类默认继承父类的无参...
Java中的重载(Overloading)、重写(Overriding)和构造函数是面向对象编程中的核心概念,它们在实现代码的灵活性和可扩展性方面起着至关重要的作用。 首先,让我们了解一下重载。重载指的是在同一个类中,可以有多个...
从提供的【部分内容】中,我们可以提炼出Java语言中面向对象编程的几个核心概念,包括类的继承、构造函数的执行顺序、静态属性的初始化顺序、以及变量的作用域等方面的知识点。以下是详细解释: 1. 类的继承与构造...