概述
匿名类(只有类体,没有类声明)分为两种,和类有关的匿名类和与接口有关的匿名类。
和类有关的匿名类:利用类名和类体创建一个匿名对象。此类体被认为是该类的一个子类去掉类声明后的类体,称为匿名类.
- 匿名类就是一个子类,不能用匿名类声明对象,但可以直接创建对象。
- 匿名类可以继承父类的方法也可以重写父类的方法。
- 使用匿名类时必然是在某个类中直接用匿名类创建对象,因此匿名类是一个内部类。可以访问外嵌类中的成员变量和方法,不可以声明static成员变量和方法。
- 匿名类的主要用途是向方法参数传值。
匿名类创建对象:
class A{
void f(){}
}
public class Examle{
public static void main(String arg[]){
A a=new A(){
void f(){print("C");}
}
a.f();//此时输出的结果是C。new A(){void f(){print("C");}就是匿名类,由类名和类体组成。类名和父类名相同,类体是对父类方法的重写。该匿名类相当于A的子类,省略了声明对象的功能。等价于声明一个继承了类A的子类B,然后用B创建的对象作为a的上转型对象,匿名类将这些过程简化了。
}
}
}
匿名类作为方法参数:
class A{
void getval(int n){print ("0");}
}
class B{
void f(A a){a.getval(3);}
}
main(){
B b=new B();
b.f(new A(){void getval(int n){print(n*n);}})//匿名类创建的对象作为参数,将该对象的引用船队给方法f的参数a。
}
new A(){void getval(int n){print(n*n);}} (匿名类)等价于创建了一个A的子类,重写了f()方法,然后将该对象作为参数传递给对象a,使其转为上转型对象,这样可以调用匿名类重写的方法。
和接口有关的匿名类:
使用接口和类体创建一个匿名对象。此类体被认为是实现了接口的类去掉类声明的类体,称为匿名类。
如果某个方法的参数是接口类型,那么可以使用接口名和类体组合的方式创建一个匿名对象,传递给方法的参数,类体必须要实现接口中的所有方法。
interface Com{
getval(int n);
}
void f(Com x){
x.getval(2);
}
f(new Com(){getval(int n)print(n*n);})//使用匿名类创建对象,将该对象传递给方法f的参数Com
当然也可以使用匿名类创建对象,接口变量存放该对象的引用,可回调实现该接口类中的方法。
Com com=new Com(){getval(int n)print(n*n);}
com.getval(4);
最后
以上就是机灵花瓣为你收集整理的匿名类的全部内容,希望文章能够帮你解决匿名类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复