一、内部类
1. 定义
内部类(Inner Class)是在一个类的内部定义的类。
2. 内部类的分类
(1) 成员内部类
public class OuterClass {
// 外部类定义
public InnerClass getInner(){
return new InnerClass();
}
// 成员内部类定义
public class InnerClass {
// 内部类定义
}
}
// 实例化内部类对象
OuterClass outer = new OuterClass();
// 方法1
OuterClass.InnerClass inner = outer.new InnerClass();
// 方法2
inner = out.new InnerClass();
// 方法3
inner = out.getInner();
(2) 静态内部类
public class OuterClass {
// 外部类的静态成员
private static int outerStaticVar = 10;
// 内部静态类: 只能直接访问外部类静态成员,若要访问非静态成员,可通过对象实例
public static class InnerClass {
// 内部类的成员方法
public void innerMethod() {
System.out.println("Inner method called");
// 可以访问外部类的静态成员
System.out.println("Outer static variable: " + outerStaticVar);
// 不能直接访问外部类的非静态成员
// System.out.println("Outer non-static variable: " + outerNonStaticVar); // 错误!
}
}
}
OuterClass.innerClass inner = new OuterClass.innerClass();
(3) 方法内部类
定义在外部类方法内的内部类。
public class Person{
public static int age;
public Object getHeart(){
class Heart{ // 不能添加public, proteted, private, static
public final int age = 13;
public String beat(){
return age+"岁的心脏在跳动";
}
}
return new Heart().beat();
}
}
public class Test{
public static void main(String[] args) {
Person person = new Person();
System.out.println(person.getHeart());
}
}
(4) 匿名内部类:
package anonymous;
public abstract class Person {
private String name;
public Person(){
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public abstract void read();
}
package anonymous;
public class personTest {
public void getRead(Person person){
person.read();
}
public static void main(String[] args){
personTest test = new personTest();
test.getRead(new Person() {
@Override
public void read(){
System.out.println("男生喜欢科幻书");
}
});
test.getRead(new Person() {
@Override
public void read(){
System.out.println("女生也喜欢科幻书");
}
});
}
}