Java子父类初始化顺序,及重写方法后的访问修饰符,异常抛出

当一个类被初始化的时候,发现它的父类尚未初始化,会先去初始化父类;
重写方法的访问修饰符只能扩大或同等,不能缩小
重写方法的异常抛出只能越是精确的异常,而不能抛出更大范围的异常,精确的程度可以直到没有异常抛出。

/**
 * @author Cherish
 * @version 1.0
 * @date 2017/8/27 16:32
 */
public class Main {
    public static void main(String[] args) {
        B a = new B();
        A b = new B("ssss");
    }

    static class A {
        static {
            System.out.print("static A,");
        }
        public A(){
            System.out.print("construct A,");
        }

        protected void aa() throws RuntimeException {
            System.out.println("aa");
        }
    }

    static class B extends A {// 若父类尚未初始化,得首先初始化父类
        static {
            System.out.print("static B,");
        }
        public B(){
            System.out.print("construct B,");
        }

        public B(String s) {
            System.out.print("construct B, s = " + s);
        }

        // 访问修饰符只能是扩大
        public void aa() {// 抛异常,是越精确(这里如果抛出Exception是错误的),直至可以没有异常
            System.out.println("true = " + true);
        }
    }
}

上面的代码运行得到如下的输出内容

static A,static B,construct A,construct B,construct A,construct B, s = ssss
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值