public class Out1 {
private String x;
public int a=3;
public Out1(String x){
this.x=x;
System.out.println(this.a);
}
@Override
public String toString(){
return "x="+x;
}
public void pp(){
System.out.println("pp");
}
class InnerFn{
public Out2 rOut2(){
return new Out2(11){
public String outkkk(){
return "kkk";
}
public void prf(){
System.out.println(outkkk());
}
};
//此处{}段,定义了一个内部类。匿名内部类可以实现一个接口或继承一个类(不能有构造函数),
//自己加的方法只能用于内部类局部
}
public Out1 rOut1(){
return new Out1("mmm"){
public int bb=5;
public void ff(){
System.out.println("ff");
}
//无法定义构造方法,只能加返回值变成普通方法
public void Out1(int a){
bb=a;
}
@Override
public void pp(){
ff();
//Out1(8);
System.out.println("匿名内部类覆盖外部类方法");
System.out.println(bb);
}
};
//继承式匿名内部类
}
}
public static void main(String[] args){
Out1 ou1=new Out1("abc");
ou1.pp();
InnerFn t2=ou1.new InnerFn();
System.out.println(ou1);
System.out.println(t2.rOut2());
System.out.println(t2.rOut1());
t2.rOut2().prf();
t2.rOut1().pp();
//t2.rOut1().ff(); //编译通不过,匿名内部类的方法不能被外部识别
}
}
public abstract class Out2 {
private int a;
Out2(int a ) {
this.a=a;
}
abstract void prf();
}
java匿名内部类
最新推荐文章于 2024-06-25 12:06:03 发布