匿名内部类,顾名思义,就是没有名字的类,匿名内部类格式如下:
new name(parameter)
{
......
}
name:父类或是接口的名字。
parameter:若name为父类,则parameter为父类构造函数的参数。
匿名内部类具有一系列的限制:
1、不能具有static成员域和成员函数和类。
2、不能具有static final 修饰的引用类型。
3、不能有自定义的构造函数。
4、不能具有静态代码块。
5、匿名内部类不能有类修饰符
使用匿名内部类的方式:
class A
{
int clsvalue;
A(int v)
{
clsvalue=v;
}
}
interface B
{
int invalue=0;
}
public class Try {
public static void main(String[] args) {
/*方法一:利用父类或接口的引用指向匿名内部类,此时引用只能访问父类或是接口中的成员域和成员函数,
例如下面的a和b只能访问clsvalue和invalue,无法访问x和y。但可以使用被覆盖的方法。
*/
A a= new A(1)
{
static final int x=0;
};
B b=new B()
{
static final int y=0;
};
/*方法二:直接通过下列代码访问,此时可以访问父类或接口、匿名内部类中定义的成员域或是成员方法。但只能使用一次(由于没有变量名)*/
new A(2){static final int y=0;};
}
}
匿名内部类仅仅是局部有效的,方法一仅在作用域内有效,方法二仅在当行代码中有效。
接下来我们编译如下代码:
class A
{
int clsvalue;
A(int v)
{
clsvalue=v;
}
}
public class Try {
public static void main(String[] args) {
A a= new A(1){ };
}
}
2 Comments
得不到的永远在骚动
@师父轻一点 得不到就是得不到,别说自己不想要