有继承关系的对象执行顺序,包括静态变量,静态代码块,普通变量,普通代码块,继承方法.

static最先执行,如果生成的是子类对象,则先会去父类中寻找,如果也有static变量或static代码块,则先执行父类中的.

其次再执行了父类的普通变量和普通代码块+父类的构造函数. --- >  再其次才是子类的普通变量和普通代码块+子类的构造函数.

而如果调用方法,在子类中有覆盖父类的同方法时,只执行子类的方法.而不会再使用父类被覆盖掉的.

原文地址:https://www.cnblogs.com/ukzq/p/9071423.html

时间: 2024-09-29 03:28:05

有继承关系的对象执行顺序,包括静态变量,静态代码块,普通变量,普通代码块,继承方法.的相关文章

【深入理解JVM】:Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成员变量(类变量)SampleClass 类的一个实例,普通成员变量SampleClass 类的2个实例(在程序中的顺序不一样)以及一个静态代码块,其中静态代码块中如果静态成员变量sam不为空,则改变sam的引用.main()方法中创建了2个主

Java类继承关系中的初始化顺序

Java类初始化的顺序经常让人犯迷糊,现在本文尝试着从JVM的角度,对Java非继承和继承关系中类的初始化顺序进行试验,尝试给出JVM角度的解释. 非继承关系中的初始化顺序 对于非继承关系,主类InitialOrderWithoutExtend中包含了静态成员变量(类变量)SampleClass 类的一个实例,普通成员变量SampleClass 类的2个实例(在程序中的顺序不一样)以及一个静态代码块,其中静态代码块中如果静态成员变量sam不为空,则改变sam的引用.main()方法中创建了2个主

是指存在继承关系的对象,不是任意类型的对象。当对不存在继承关系的对象进行强制类型转换时

这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常.在继承链中,我们将子类向父类转换称为“向上转型”,将父类向子类转换称为“向下转型”.很多时候,我们会... Coda 发布于 2015-04-12 14:09 评论(1)阅读(72) 1 http://www.djob.com/job_8EED14ACE3DE31D0.htmlhttp://www.

Java中的继承关系的加载顺序

/* 在加载类时,Java虚拟机先加载父类再加载子类,再对静态初始化块. 静态成员变量(类变量).静态方法进行一次初始化. 只有调用new方法时才会创建类的对象.按照父子继承关系进行初始化, 首先执行父类的初始化块部分,然后是父类的构造方法,再执行子类的 初始化块,最后是子类的构造方法. 销毁对象的过程是:首先销毁子类部分,再销毁父类部分. */ public class InheritanceLoadOrder { public static void main(String[] args)

Java基础-继承-子类与父类执行顺序

代码 public class Test { public static void main(String[] args) { new Circle(); } } class Draw { public Draw(String type) { System.out.println(type+" draw constructor"); } } class Shape { private Draw draw = new Draw("shape"); public Sha

Java中包含继承关系时对象的创建与销毁顺序详解(附源码)

前言 通过组合和继承方法来创建新类时,永远不必担心对象的清理问题,子对象通常都会留给垃圾回收器进行处理.如果确实遇到清理的问题,那么必须用心为新类创建dispose()方法(在这里我选用此名称,读者可以提出更好的).并且由于继承的缘故,如果我们有其他作为垃圾回收一部分的特殊清理动作,就必须在导出类中覆盖dispose()方法.当覆盖被继承类的dispose()方法时,务必记住调用基类版本dispose()方法:否则,基类的清理动作就不会发生.下例就证明了这一点: 示例源码 package com

JavaScript面向对象编程(10)快速构建继承关系之对象拷贝

前面的例子我们是通过构造器创建对象,并且希望该对象继承来自另外一个构造器的对象 我们也可以直接面向一个对象来达成继承的目的,使用下属步骤: 1.拷贝一个对象 2.给新对象添加属性 /** * 通过拷贝继承对象的属性和行为 * @param {Object} p 父对象 */ function extendCopy(p) { var c = {}; for (var i in p) { c[i] = p[i]; } c.uber = p; return c; } 使用起来也比较简单: var sh

Java 继承中构造方法的执行顺序问题

在Java中,如果一个类没有任何显式创建的构造器则该类默认会有一个无参构造器:如果显式创建了有参构造器则该类就不再有默认无参构造器. 在Java继承中,构造器并不能被继承,而是被显示或隐式调用. 1.子类的构造方法中必须调用其基类的构造方法(显示或隐式) 1.1.若是显示调用,则可以通过 super(argument_list) 来调用,且super调用必须在首行以保证子类对象从所有直接或间接父类中继承的实例变量都被正确地初始化(this关键字可以调用本类中的其他构造器,也必须在首句,因此thi

多继承父类构造方法的执行顺序

1 class a: 2 def __init__(self): 3 print('a') 4 5 class b(a): 6 def __init__(self): 7 super().__init__() 8 print('b') 9 10 class c(a): 11 def __init__(self): 12 super().__init__() 13 print('c') 14 15 16 class d(b,c): 17 pass 18 19 mm=d() 20 ''' 21 a