内部类(Inner Class),内部类共分为4种。
1.静态内部类(static inner class):只能访问外部类的静态成员变量与静态方法,生成
静态内部类对象的方式为:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
2.成员内部类(member inner class):可以访问外部类的静态与非静态的方法与成员变
量。生成成员内部类对象的方式为:
OuterClass.InnerClass inner = new OuterClass().new InnerClass();
若想在局部内部类中访问外部类的成员变量,语法为:OuterClass.this.a;
3.局部内部类(Local Inner Class):定义在方法当中,只能访问方法中声明的final类型
的变量。
4.匿名内部类(Anonymous Inner Class):没有类名称的局部内部类;匿名内部类会隐式地继承一个父类或实现一个接口。
?
静态内部类和成员内部类比较简单在此就不举例了。
局部内部类代码示例:
package com.lfl.innerclass;
class LocalInner {
private int a = 3;
public void doSomething() {
final int i = 5;
class Inner3 {
public void test() {
System.out.println(i);
System.out.println(a);
go();
}
}
new Inner3().test();
}
public static void go() {
System.out.println("hello");
}
}
public class LocalInnerClassTest {
public static void main(String[] args) {
LocalInner inner = new LocalInner();
inner.doSomething();
}
}
?
?
匿名内部类代码示例:
package com.lfl.innerclass;
import java.util.Date;
public class AnonymousInnerClassTest {
public String get(Date date) {
return date.toLocaleString();
}
public Object getObject() {
return new Object() {
public String toString() {
System.out.println("hello world2");
return "hello";
}
};
}
public static void main(String[] args) {
AnonymousInnerClassTest inner = new AnonymousInnerClassTest();
// non anonymous innerclass
String date = inner.get(new Date());
System.out.println(date);
//anonymous innerclass
String str = inner.get(new Date() {
public String toLocaleString() {
return "hello world";
}
});
System.out.println(str);
Object obj = inner.getObject();
String s = obj.toString();
System.out.println(s);
}
}
?
?
?
?
?
?
?