打字猴:1.700441534e+09
1700441534
1700441535 }
1700441536
1700441537 }
1700441538
1700441539 //声明和赋值
1700441540
1700441541 List l3=new Sub();
1700441542
1700441543 看到了吧,就是多了一个初始化块而已,起到构造函数的功能。我们知道一个类肯定有一个构造函数,且构造函数的名称和类名相同,那问题来了:匿名类的构造函数是什么呢?它没有名字呀!很显然,初始化块就是它的构造函数。当然,一个类中的构造函数块可以是多个,也就是说可以出现如下代码:
1700441544
1700441545 List l3=new ArrayList(){{}{}{}{}{}};
1700441546
1700441547 上面的代码是正确无误,没有任何问题的。现在清楚了:匿名函数虽然没有名字,但也是可以有构造函数的,它用构造函数块来代替,那上面的3个输出就很清楚了:虽然父类相同,但是类还是不同的。
1700441548
1700441549
1700441550
1700441551
1700441552 编写高质量代码:改善Java程序的151个建议 [:1700438109]
1700441553 编写高质量代码:改善Java程序的151个建议 建议40:匿名类的构造函数很特殊
1700441554
1700441555 在上一个建议中我们讲到匿名类虽然没有名字,但可以有一个初始化块来充当构造函数,那这个构造函数是否就和普通的构造函数完全一样呢?我们来看一个例子,设计一个计算器,进行加减乘除运算,代码如下:
1700441556
1700441557 //定义一个枚举,限定操作符
1700441558
1700441559 enum Ops{ADD, SUB}
1700441560
1700441561 class Calculator{
1700441562
1700441563 private int i, j,result;
1700441564
1700441565 //无参构造
1700441566
1700441567 public Calculator(){}
1700441568
1700441569 //有参构造
1700441570
1700441571 public Calculator(int_i, int_j){
1700441572
1700441573 i=_i;
1700441574
1700441575 j=_j;
1700441576
1700441577 }
1700441578
1700441579 //设置符号,是加法运算还是减法运算
1700441580
1700441581 protected void setOperator(Ops_op){
1700441582
1700441583 result=_op.equals(Ops.ADD)?i+j:i-j;
[ 上一页 ]  [ :1.700441534e+09 ]  [ 下一页 ]