#java 细节static、super

该程序演示了Java中构造器、静态方法、普通方法以及多态的调用顺序。在创建Test类实例时,执行顺序为静态代码块、父类构造器、普通代码块、本类构造器中的其他语句。静态方法不会体现多态行为,总是调用定义它的类的方法。而通过父类引用调用非静态方法时,如果子类重写了该方法,将执行子类的实现。
摘要由CSDN通过智能技术生成
/*
 * @ClassName: test01
 * @User: QianJueZhang
 * @Description:
 * @Date: 2023/3/13 22:05
 */

class A {

//    A() {
//        System.out.println("构造A");
//    }

    A(String str) {
        System.out.println(str);
    }

    static void getA() {
        System.out.println("父类中的静态方法");
    }

    void getZ() {
        System.out.println("父类中的普通方法");
    }
}

/**
 * 本程序测试 多态、static、new的调用顺序
 */
public class Test extends A {
    // 静态代码块
    static {
        System.out.println("111");
    }

    // 普通代码块
    {
        System.out.println("333");
    }

    Test() {
        super("222");
        System.out.println("本类构造中的其它语句");
        super.getZ();

    }

    static void getA() {
        System.out.println("子类重写父类中的静态方法");
    }

    public static void main(String[] args) {
        Test test = new Test(); // 执行顺序: 静态代码块 --》 本类构造器(调用父类构造器) --》 普通代码块 --》 本类构造器(中其它语句)

        A aa = new A("222");
        /*
            111
            222
            333
            222
        */

        System.out.println("============");

        A.getA();
        aa.getA();      // 父类中的静态方法

        test.getA();
        Test.getA();    // 子类重写父类中的静态方法


        aa = test;      // 子类引用 给 父类引用 --》多态
        aa.getZ();      // 子类重写父类中的普通方法 (多态只能让父类调用子类中继承自父类的方法)
        // aa.getS();   // 多态不能让 父类调用 子类的独有方法
        aa.getA();      // 父类中的静态方法 (static方法 达不到过多态的效果,一般使用多态后,调用的是子类中的方法,但因为原方法是static方法,【对象.成员 和 对象.静态成员 的使用方法 有歧义】,所以调用的还是父类本身中的方法)


        test = (Test) aa;    //(在上面 父类引用实际指向子类对象 ) 父类引用 强制转换成子类 赋给 子类引用
        // ( 在上面中,aa现在已经指向子类对象,把aa 强制转换成子类,那么现在 就可以把完全把aa看成一个指向了子类的引用 )
        test.getA();        // 子类重写父类中的静态方法
        test.getS();        // 子类独有普通方法

    }

    void getS() {
        System.out.println("子类独有普通方法");
    }

    void getZ() {
        System.out.println("子类重写父类中的普通方法");
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值