内部类
定义:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
特性:
- 内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
- 在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
- 创建内部类对象的时刻并不依赖于外围类对象的创建。
- 内部类提供了更好的封装,除了该外围类,其他类都不能访问。
例如:
public class OuterClass {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public class InnerClass {
public InnerClass() {
name = "chenssy";
age = 23;
}
public void display() {
System.out.println("name:" + getName() + " ;age:" + getAge());
}
}
public static void main(String[] args) {
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();
innerClass.display();
}
}
编译:内部类是个编译时的概念,一旦编译成功后,它就与外围类属于两个完全不同的类(当然他们之间还是有联系的)。对于一个名为OuterClass的外围类和一个名为InnerClass的内部类,在编译成功后,会出现这样两个class文件:OuterClass.class和OuterClass$InnerClass.class
类别:内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类
注意:
- 第一:成员内部类中不能存在任何static的变量和方法;
- 第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。
静态内部类:
使用static修饰的内部类称之为静态内部类。
1、 它的创建是不需要依赖于外围类的。
2、 它不能使用任何外围类的非static成员变量和方法。