先看代码和里边的问题:
class NB{
void A(){
System.out.println("我是NB");
}
}
class NC{
void Y(NB a){
a.A();
}
}
public class NA {
public static void main(String[] args) {
NB b=new NB();
NB c=new NB(){ //问题二:这两句话有什么不同吗?
@Override
void A() {
System.out.println("我是匿名类");
}
public void C(){
System.out.println("我是方法二");
}
};
b.A();
c.A();
NC d=new NC();
d.Y(new NB(){ //问题一:这里把匿名类传给对象d的方法Y后就可以使用a来调用匿名类中的方法了,那么它还算是匿名类吗?如果算那为什么ta可以用a来调用呢
void A(){
System.out.println("我才是真的匿名类");
C();
}
void C(){
System.out.println("我才是真的老二");
}
});
}
}
问题一:new NB(){...}是一个匿名类,只是它的引用传递到对象d的方法Y中的参数里边去了,后边怎么去调用关我匿名类什么事,就好比你们抓周树人,关我鲁迅什么事。
问题二:
NB b=new NB();
NB c=new NB(){ //问题二:这两句话有什么不同吗?
@Override
void A() {
System.out.println("我是匿名类");
}
public void C(){
System.out.println("我是方法二");
}
};
先思考一下,这里边两句话有什么不同吗?如果说刚刚那个只是把引用传给了参数,那现在这个呢?匿名类不是没有名字吗?所以它是匿名类还是NB类方法的重写呢 ?
其实它还是一个匿名类,但是它为什么这么写呢,不妨尝试一下用上转型的概念理解一下,匿名类是一个子类,所以说是重写父类的方法好像也没错,
它们两句的差别在于:
第一句是声明创建了一个对象
第二句是将匿名类上转型,匿名类是没有声明步骤的,希望不要搞混了