将一个类的定义类放在另一个类的定义内部,叫内部类。
public class InnerClassTest {
public class InnerClassA {//内部类
}
}
内部类继承自某个类和实现某个接口,内部类的代码操作创建它的外围类的对象。
所以可以认为内部类提供了某种进入其外围类的窗口。
外围类实现接口不是总能享用到接口带来的方便,有时候需要用到接口的实现。
每个内部类都能独立地继承一个接口的实现,所以无论外围类是否已经继承了某个接口的实现,
对于内部类没有影响。
普通内部类对象隐藏地保存了一个引用,指向创建它的外围类对象。然而当内部类为静态static时,情况发生了变化。
1.要创建静态类的对象,并不需要其外围类的对象。
2.不能从嵌套类的对象中访问非静态的外围类对象。
3.普通内部类不能有static数据和字段,也不能包含嵌套类。
只能访问外部类的静态成员变量与静态方法。
静态内部类的非静态成员可访问外部类的静态变量,而不可访问外部类的非静态变量。
内部类同外部类的区别
/**
-
外部类、成员内部类的定义
*/
public class Outer {private int outerVariable = 1;
private int commonVariable = 2;
private static int outerStaticVariable = 3;/**
- 成员方法
*/
public void outerMethod() {
System.out.println(“我是外部类的outerMethod方法”);
}
/**
- 静态方法
*/
public static void outerStaticMethod() {
System.out.println(“我是外部类的outerStaticMethod静态方法”);
}
/**
-
内部类
*/
public class Inner {private int commonVariable = 20;
/**
- 构造方法
*/
public Inner() {
}
/**
- 成员方法,访问外部类信息(属性、方法)
*/
public void innerShow() {
//当和外部类冲突时,直接引用属性名,是内部类的成员属性
System.out.println(“内部的commonVariable:” + commonVariable);
//内部类访问外部属性
System.out.println(“outerVariable:” + outerVariable);
//当和外部类属性名重叠时,可通过外部类名.this.属性名
System.out.println(“外部的commonVariable:” + Outer.this.commonVariable);
System.out.println(“outerStaticVariable:” + outerStaticVariable);
//访问外部类的方法
outerMethod();
outerStaticMethod();
}
}
- 构造方法
/**
- 外部类访问内部类信息
*/
public void outerShow() {
Inner inner = new Inner();
inner.innerShow();
}
}
- 成员方法
内部类等同于类里面嵌套一个类