Java——继承的运行顺序

首先看一个代码

父类代码:

 1 public class Parent {
 2
 3     {
 4         System.out.println("Parent非静态代码块");
 5     }
 6
 7     static {
 8         System.out.println("Parent静态代码块");
 9     }
10
11     public String name;
12
13
14     public Parent() {
15         this.name = "小明";
16 //        play1();
17         play();
18     }
19
20 //    public void play1() {
21 //        System.out.println(name +"在Parent类中玩游戏!!!");
22 //    }
23
24     public void play() {
25         System.out.println(name +"在Parent类中玩游戏!!!");
26     }
27 }

子类代码:

 1 public class Sub extends Parent{
 2
 3     {
 4         System.out.println("Sub非静态代码块");
 5     }
 6
 7     static {
 8         System.out.println("Sub静态代码块");
 9     }
10
11     public String name;
12
13     public Sub(String name) {
14         super();
15         this.name = name;
16     }
17
18     public void play() {
19         System.out.println(name +"在Sub类中玩游戏!!!");
20     }
21 }

main方法代码:

 1 public class Main {
 2
 3     public static void main(String[] args) {
 4
 5 //        System.out.println("========主方法========");
 6
 7         Sub sub = new Sub("小强");
 8
 9         sub.play();
10
11
12     }
13 

运行的结果是:Parent静态代码块
       Sub静态代码块
       Parent非静态代码块
       null在Sub类中玩游戏!!!
       Sub非静态代码块
       小强在Sub类中玩游戏!!!

其中有几个点需要注意:

(1)输出null的原因是当时name还没有进行初始化(sub.name)

(2)而play()运行出来sub的原因是没有parent对象

总结:

  继承结构在内存中运行步骤:

  父类静态变量以及静态程序块 --- 子类的静态变量以及静态程序块 ---(子类主方法)--- 父类非静态代码块 --- 父类初始化---父类中构造方法 --- 子类中非静态代码块 --- 子类初始化---子类中构造方法 --- 对象调用的方法

原文地址:https://www.cnblogs.com/ne709/p/9475958.html

时间: 2024-11-05 16:54:27

Java——继承的运行顺序的相关文章

java For 循环 运行顺序

运行结果: abi love javacbi love javacbi love javacbi love javac 结论:先运行赋值语句i--->条件判断--->执行下面语句--->改变数值i--->条件判断...........循环 直到条件不满足 原文地址:https://www.cnblogs.com/fax1996/p/9288571.html

Java知多少(23)类的基本运行顺序

我们以下面的类来说明一个基本的 Java 类的运行顺序: 1 public class Demo{ 2 private String name; 3 private int age; 4 public Demo(){ 5 name = "微学苑"; 6 age = 3; 7 } 8 public static void main(String[] args){ 9 Demo obj = new Demo(); 10 System.out.println(obj.name + "

5.Java类的基本运行顺序

我们以下面的类来说明一个基本的 Java 类的运行顺序: public class Demo{ private String name; private int age; public Demo(){ name = "微学苑"; age = 3; } public static void main(String[] args){ Demo obj = new Demo(); System.out.println(obj.name + "的年龄是" + obj.age

java类的基本运行顺序

作为程序员,应该对自己写的程序具备充分的掌控能力,应该清楚程序的基本运行过程,否则糊里糊涂的,不利于对程序的理解和控制,也不利于技术上的发展. 我们以下面的类来说明一个基本的 Java 类的运行顺序: 1. public class Test { 2.     private String name; 3.     private int age; 4. 5.     public Test() { 6.         name = "微学苑"; 7.         age = 3

java继承时候类的运行顺序问题

子类在继承父类后,创建子类对象会首先调用父类的构造函数,先运行父类的构造函数,然后再运行子类的构造函数,例如以下所看到的: class Father{ public Father(){ System.out.println("I am father"); } } public class Child extends Father{ public Child(){ System.out.println("I am child"); } public static vo

3.Java继承中父类与子类的初始化顺序

在 Java 编程语言中,对象的初始化是非常结构化的,这样做是为了保证安全.在前面的模块中,看到了当一个特定对象被创建时发生了什么.由于继承性,对象被完成,而且下述行为按顺序发生: 存储空间被分配并初始化到 0 值 进行显式初始化 调用构造方法 层次中的每个类都会发生最后两个步骤,是从最上层开始. Java 技术安全模式要求在子类执行任何东西之前,描述父类的一个对象的各个方面都必须初始化.因此,Java 编程语言总是在执行子构造方法前调用父类构造方法的版本.有继承的类在运行的时候,一定要记得:初

java实例化对象时程序运行顺序

当java实例化对象时,首先先进行类加载,类加载的整个过程是将类字节码引入内存,并未类中的static变量赋值.上篇文章已经大概分析了类的加载机制,下面讲一下类的实例化过程. 首先引入示例代码 父类 package test; public class Fu { public int j = 9; public static int i = 10; static{ i = 9; System.out.println("Fu静态代码块"); } { j = 10; System.out.

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

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

Java—继承

继承 继承是类与类的一种关系,是一种"is a"的关系.注意:java中的继承是单继承,一个类只有一个父类. 继承的好处:子类拥有父类的所有属性和方法(private修饰的无效),实现代码的复用 语法规则:class 子类 extends 父类{} 父类对象的属性和子类对象的属性并没有关系,是两个属性 方法的重写 如果子类对继承父类的方法不满意,可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则:返回值类型.方法名.参数类型及个数,都要与父类继承的方法相同. 继承的