JAVA中的匿名内部类

class Boo{
Boo(String s){}
Boo(){}
}

class Bar extends Boo{
Bar(){}
Bar(String s){super(s);}
void zoo(){
//insert code here
}
}
which create an anonymous inner class from within class Bar?(choose all that apply)
A. Boo f = new Boo(24){}
B. Boo f = new Bar(){};
C. Boo f = new Boo(){String s;};
D. Bar f = new Boo(String s){};
E. Boo f = new Boo.Bar(String s){};

答案因该选什么有那位能解释下吗?
对的怎么不解释下啊?
new Bar(){} 和new Bar()有什么不同?
new Boo(){String s} 和
class Boo{
Boo(String s){}
Boo(){}
}
中的Boo(String s){}, Boo(){}有什么关系呢?
望牛人补充下啊?

第1个回答  推荐于2016-10-25
选B,C
A;匿名类与其说一个类,不如说他是一个表达式,因为写匿名类是在一个表达式里面写的,所以要注意写完一个匿名类后要在结尾写一个“:”
D;new Boo(String s){};这里的内部类虽然继承了Boo,但是这里实例化的类与Bar一点关系都没有(虽然他们都继承了Boo类,就像三角形和四边形继承自形状,你能说三角形是四边形吗)
E;匿名类不像普通的内部类,不要向E一样要Boo.Bar(String s){}; 这样写,这样写没有任何意义
new Bar(){} 和new Bar()的区别在于,第一个相当于继承了Bar类然后实例化Bar的子类对象(也就是说第一个是之类对象),后一个就是Bar对象
匿名类就是一个没有名字的,把继承类与实例化子类对象压缩在一个表达式里面
Boo(String s){}, Boo(){}这是统一各位类中的两个构造方法,没有什么关系,都是用来初始化对象的,一个是有参数的,一个是没有参数的,在实例化对象时,只能选择其中一个本回答被提问者采纳
相似回答