打字猴:1.70044163e+09
1700441630
1700441631 }
1700441632
1700441633 }
1700441634
1700441635 匿名类和这个Add类是等价的吗?可能有人会说:上面只是把匿名类增加了一个名字,其他的都没有改动,那肯定是等价的啦!毫无疑问!那好,你再写个客户端调用Add类的方法看看。是不是输出结果为0(为什么是0?这很容易,有参构造没有赋值)。这说明两者不等价,不过,原因何在呢?
1700441636
1700441637 原来是因为匿名类的构造函数特殊处理机制,一般类(也就是具有显式名字的类)的所有构造函数默认都是调用父类的无参构造的,而匿名类因为没有名字,只能由构造代码块代替,也就无所谓的有参和无参构造函数了,它在初始化时直接调用了父类的同参数构造,然后再调用了自己的构造代码块,也就是说上面的匿名类与下面的代码是等价的:
1700441638
1700441639 //加法计算
1700441640
1700441641 class Add extends Calculator{
1700441642
1700441643 {
1700441644
1700441645 setOperator(Ops.ADD);
1700441646
1700441647 }
1700441648
1700441649 //覆写父类的构造方法
1700441650
1700441651 public Add(int_i, int_j){
1700441652
1700441653 super(_i,_j);
1700441654
1700441655 }
1700441656
1700441657 }
1700441658
1700441659 它首先会调用父类有两个参数的构造函数,而不是无参构造,这是匿名类的构造函数与普通类的差别,但是这一点也确实鲜有人细细琢磨,因为它的处理机制符合习惯呀,我传递两个参数,就是希望先调用父类有两个参数的构造,然后再执行我自己的构造函数,而Java的处理机制也正是如此处理的!
1700441660
1700441661
1700441662
1700441663
1700441664 编写高质量代码:改善Java程序的151个建议 [:1700438110]
1700441665 编写高质量代码:改善Java程序的151个建议 建议41:让多重继承成为现实
1700441666
1700441667 在Java中一个类可以多重实现,但不能多重继承,也就是说一个类能够同时实现多个接口,但不能同时继承多个类。但有时候我们确实需要继承多个类,比如希望拥有两个类的行为功能,就很难使用单继承来解决问题了(当然,使用多层继承是可以解决的)。幸运的是Java中提供的内部类可以曲折地解决此问题,我们来看一个案例,定义一个父亲、母亲接口,描述父亲强壮、母亲温柔的理想情形,代码如下:
1700441668
1700441669 //父亲
1700441670
1700441671 interface Father{
1700441672
1700441673 public int strong();
1700441674
1700441675 }
1700441676
1700441677 //母亲
1700441678
1700441679 interface Mother{
[ 上一页 ]  [ :1.70044163e+09 ]  [ 下一页 ]