内部类三种,1:普通成员内部类(成员内部类);2:方法内部类(局部内部类);3:静态内部类(成员内部类);4:匿名内部类(继承式、接口式、参数式)(局部内部类)
匿名类有以下几个原则:
1:不能有构造方法,只能有一个实例;
2:不能定义任何静态成员、静态方法;
3:不能是 public,protected,private,static;
4:一定是在new的后面。用其隐含实现一个接口或实现一个类;
5:匿名内部类为局部的,所以局部内部类的所有限制都对其生效。
@Test
void testBaseData(){
Outer outer = new Outer();
outer.print3(new Eat() {
@Override
public void eat() {
System.out.println("参数式匿名内部类");
}
});
}
}
class Outer{
private String name = "name";
//普通成员内部类
class Inner{
public void print(){
System.out.println("成员内部类,可以访问到外部类的属性" + name);
}
}
public void innerPrint(){
Inner inner = new Inner();
inner.print();
}
public void show(){
int x = 10;//实际是被final修饰
//方法内部类
class Inner2{
public void print(){
System.out.println("方法内部类,可以访问到外部类的属性" + name + "但是不可以修改x");
}
}
Inner2 inner2 = new Inner2();
inner2.print();
}
//静态内部类
static class Inner3{
public void print(){
System.out.println("静态内部类,无法访问到外部类的属性name,但是可以访问静态属性");
}
}
//匿名内部类
//继承式
public void print1(){
Cat cat = new Cat() {
@Override
public void eat() {
System.out.println("继承式匿名内部类");
}
};
cat.eat();
}
//接口式
public void print2(){
Eat eat = new Eat() {
@Override
public void eat() {
System.out.println("接口式匿名内部类");
}
};
eat.eat();
}
//参数式
public void print3(Eat eat){
eat.eat();
}
}
abstract class Cat{
abstract void eat();
}
interface Eat{
public void eat();
}
8万+

被折叠的 条评论
为什么被折叠?



