关于Java编程思想中163页最后的问题以及有子类的类初始化问题

3 篇文章 0 订阅
1 篇文章 0 订阅
public class Answer {
    public static void main(String []args) {
        Before x = new After();
        System.out.println("--------");
        //Before y = new After();
    }
}

class Before {
    Before() {
        print();
        System.out.println("-----------");
        pub = 5;
    }
    void print() {System.out.println("("+ pub + ")"); }
    class Printf {Printf(){System.out.println("print!!!!!");}}
    protected int pub = -1;
    protected Printf prin = new Printf();
    protected String str = new String("before");
}

class After extends Before {
    After() {
        super();
        print();
    }
    void print() {System.out.print(pri);System.out.println("("+ pub + ")"); System.out.println(sta);System.out.println(str);}
    private int pri = 3;
    private static int sta = 1;
    protected int pub = 2;
    protected Printf prin = new Printf();
    protected String str = new String("after");
}

 

 

代码中其他都比较好理解,只有三个protected数据不太好理解,我们发现pub和str被赋值为-1与before没有打印出来,很有可能是基类构造函数之后和派生类构造函数的两次打印之前被赋值了(当然也有可能是根本就没有发生这一步),同时print!!!被打印了两次,都是在构造函数打印之前,再加上书中说所有事发生之前将对象的储存空间化为二进制0,是不是可以猜测,对于类对象化为0这一步也是使用相应的构造器完成的????

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值