代码混合执行顺序

本文通过实例分析了Java和C#中代码的执行顺序,包括实例初始化、继承、this和super的使用、虚方法调用以及类初始化和实例初始化的混合情况。详细解释了在不同场景下,代码执行的逻辑,帮助理解这两门语言的运行机制。
摘要由CSDN通过智能技术生成

阅读如下代码

class HelloA{
    public HelloA(){
        System.out.println("HelloA");
    }
    {
        System.out.println("I'm A Class");
    }
}
​
class HelloB extends HelloA{
    public HelloB(){
        //super(); // 调用父类构造函数(1)
        System.out.println("HelloB");
    }
    {
        System.out.println("I'm B Class");
    }
}
​
public class TestHelloB{
    public static void main(String[] args) {
        new HelloB();
    }
}

1、代码new的是HelloB  所以进入HelloB类 
                子类的所有构造方法中都有一个隐藏的父类构造函数super()
2、进入HelloB的无参构造中---->super()--->HelloA
实例初始化的顺序
        1>super()
        2>显式赋值
        3>普通成员代码块内容
        4>构造器内容
2和3的位置谁的顺序在前面就谁先执行,但是1和4的顺序是固定的
3、执行HelloA中的代码块---->无参构造----->回到子类
4、执行HelloB中的代码快----->无参构造----->返回main函数
I'm A Class
HelloA
I'm B Class
HelloB

阅读如下代码

public class TestFatherChild {
	public static void main(String[] args) {
		Father f = new Father();//(1)
		Child c = new Child();//(2)
	}
}
class Father {
	public Father(){
		System.out.println("father");
	}
}
class Child extends Father{
	public Child(){
		System.out.println("child");
	}
}
1、语句1进入father类的无参---->先输出fathe
2、语句2进入child类的无参----->有默认的super()---->去父类father
3、没有显式赋值和代码块  所以直接执行构造器内容---->输出father
4、回到child类---->同上  进入无参---->输出child
father
father
child

实例初始化运行结果分析

public class Test01 {
    public static void main(String[] args) {
        new Child("mike");
    }
}
​
class People {
    private String name;
​
    public People() {
        System.out.print("1");
    }
​
    public People(String name) {
        System.out.print("2");
        this.name = name;
    }
}
​
class Child extends People {
    People father;
​
    public Child(String name) {
        System.out.print("3");
        father = new People(name + " F");
    }
​
    public Child() {
        System.out.print("4");
    }
}

1、进入child类---->super()---->进入People类无参
2、输出1---->回到child类----->
3、输出3----->new People  
4、进入Peoper有参---->输出2---->name =mikeF

答案:132

继承、属性同名问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值