java-匿名内部类细节
源码如下
package com.InnerClass;
public class anonymousInnerClassDetail {
public static void main(String[] args) {
Outer05 outer05 = new Outer05();
outer05.f1();
//外部其他类 不能访问 匿名内部类
System.out.println(“main Outer05 hashcode=” + outer05);
}
}
class Outer05 {
private int n1 = 99;
public void f1() {
//创建一个基于类的匿名内部类
Person p = new Person() {
private int n1 = 88;
@Override
public void hi() {
//(3)可以直接访问外部类的所有成员 包含私有的
System.out.println("匿名内部类重写了 hi方法 n1=" + n1
+ " 外部类的n1=" + Outer05.this.n1 );
//Outer05.this 就是调用 f1 的对象
System.out.println("Outer05.this hashcode=" + Outer05.this);
}
};
p.hi();//(1)动态绑定机制 运行类型是 Outer05$1
//(2)也可以直接调用 匿名内部类本身也是返回对象
//class匿名内部类 extends Person {}
// new Person(){
// @Override
// public void hi() {
// System.out.println(“匿名内部类重写了 hi方法 哈哈哈。。”);
// }
//
// @Override
// public void ok(String str) {
// super.ok(str);
// }
// }.ok(“jack”);
}
}
class Person {
public void hi() {
System.out.println(“Person hi()”);
}
public void ok(String str) {
System.out.println("Person ok() " + str);
}
}
//抽象类/接口