笔者今天又写了个程序,关于匿名内部类的,红色部分是不利用匿名类的话,实现接口所写的代码;而当我们使用了匿名类,我想问的是,每声明一个匿名类只能调用一次方法吗?我想调用print1()和print2()两个方法,难道要这样重复声明code1和code2两个匿名类?有没有一种方法只声明一次匿名类,可以多次调用它所实现接口的方法?public class 匿名内部类 { public static void main(String[] args) {
/* K k1=new H();
System.out.println(k1.print1());
System.out.println(k1.print2());
*/
code1. new K(){
public int print1(){
System.out.println("匿名内部类的整型方法");
return 66;
}
public double print2(){
//System.out.println("匿名内部类的双精度浮点型方法");
return 0;
}
}.print1();
code2. new K(){
public int print1(){
return 0;
}
public double print2(){
System.out.println("匿名内部类的双精度浮点型方法");
return 66.666666;
}
}.print2();
}}interface K{
public int print1();
public double print2();
}//正常情况是用别的类去实现接口,也可以像上面那样弄成匿名类,更方便!
/*class H implements K{
public int a;
public double b;
public int print1(){
System.out.println("匿名内部类的整型方法");
return 66;
}
public double print2(){
System.out.println("匿名内部类的双精度浮点型方法");
return 66.666666;
}
}*/
/* K k1=new H();
System.out.println(k1.print1());
System.out.println(k1.print2());
*/
code1. new K(){
public int print1(){
System.out.println("匿名内部类的整型方法");
return 66;
}
public double print2(){
//System.out.println("匿名内部类的双精度浮点型方法");
return 0;
}
}.print1();
code2. new K(){
public int print1(){
return 0;
}
public double print2(){
System.out.println("匿名内部类的双精度浮点型方法");
return 66.666666;
}
}.print2();
}}interface K{
public int print1();
public double print2();
}//正常情况是用别的类去实现接口,也可以像上面那样弄成匿名类,更方便!
/*class H implements K{
public int a;
public double b;
public int print1(){
System.out.println("匿名内部类的整型方法");
return 66;
}
public double print2(){
System.out.println("匿名内部类的双精度浮点型方法");
return 66.666666;
}
}*/
--是的
有没有一种方法只声明一次匿名类,可以多次调用它所实现接口的方法
--没有依lz的要求其实就没必要用到匿名类,lz说到的都是匿名类的两个痛处。当然,逻辑上,lz本来可以将print1和print2分别创建到两个匿名类中。不过这不影响对lz问题的答案。
public class code1
{ public static void main(String[] args)
{
K k = new K()
{
public int print1()
{
System.out.println("匿名内部类的整型方法");
return 66;
} public double print2()
{
// System.out.println("匿名内部类的双精度浮点型方法");
return 0;
}
};
k.print1();
k.print2(); }}interface K
{
public int print1(); public double print2();
}
K k=new K(){
public int print1(){
System.out.println("匿名内部类的整型方法");
return 66;
}
public double print2(){
//System.out.println("匿名内部类的双精度浮点型方法");
return 0;
}
};
k.print1();
k.print2();
K k=new K(){
public int print1(){
System.out.println("匿名内部类的整型方法");
return 66;
}
public double print2(){
//System.out.println("匿名内部类的双精度浮点型方法");
return 0;
}
};
k.print1();
k.print2();
但是这句
K k = new K()
中的类本身就是有名字的,就是K k 里的大写K匿名内部类的"类本身没有名字"这句可能说得就有些朦胧,其实说白了匿名类就是都用构造器
return new Constructor(){}
创建其实例的且因此只能创建一次。注意这里的 Constructor 不是类名而是构造器的名字,只不过Java/C++里它们名字一样而已。好处如同9楼讲得一样,匿名类可以省去声明子类或者实现接口的那些代码,使代码逻辑更清晰。
但凡是出现
A a = new A(){...};
如果出现在类内部只能叫做内部类不算匿名内部类。
因为已经出现了类名Class,自然也出现了类的实例,类的方法可以随着实例随意调用。
说白了这个在类的内部定义个内部类,然后再用构造器创建实例
A a = new A();
Class A{
...
}
没啥区别,只是代码风格不同罢了。
A.B.getC().D.E.getF();