//内部类可为静态,可用protected和private修饰 (而外部类只能使用public和缺省的包访问权限)。
//内部类主要有如下几类:成员内部类、局部内部类、静态内部类、匿名内部类。 编程
//每一个内部类都能独立地继承自一个(接口的)实现,因此不管外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
//若是没有内部类提供的能够继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。
//从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
public class InnerClass1 {
private static int i = 1;
private int j = 10;
private int k = 20; this
public static void outer_f1() {
} spa
public void outer_f2() {
} 设计
// 成员内部类中,不能定义静态成员
// 成员内部类中,能够访问外部类的全部成员
class Inner {
// static int inner_is = 100; //内部类中不容许定义静态变量
int j = 100; // 内部类和外部类的实例变量能够共存
int inner_i = 1; 对象
void inner_f1() {
//在内部类中访问内部类本身的变量直接用变量名
System.out.println(j);
// 在内部类中访问内部类本身的变量也能够用this.变量名
System.out.println(this.j); 继承
//能够访问外部类的全部变量及方法
//在内部类中访问外部类中与内部类同名的实例变量用 外部类名.this.变量名
System.out.println(InnerClass1.this.j);
// 若是内部类中没有与外部类同名的变量,则能够直接用变量名访问外部类变量
System.out.println(k);
System.out.println(i);
outer_f1();
outer_f2();
}
} 接口
//外部类的非静态方法访问 成员内部类
public void outer_f3() {
Inner inner = new Inner();
inner.inner_f1();
} class
//外部类的静态方法访问 成员内部类,分三个步骤《与在外部类外部访问成员内部类同样》
public static void outer_f4() {
// step1 创建外部类对象
InnerClass1 out = new InnerClass1();
// step2 根据外部类对象创建内部类对象
Inner inner = out.new Inner();
// step3 访问内部类的方法
inner.inner_f1();
} 变量
public static void main(String[] args) {
InnerClass1.outer_f4();
// 成员内部类必须使用此外围类的一个对象来建立其内部类的一个对象:会引用建立它的外围对象
//若是你用的是静态的内部类,那就不须要对其外围类对象的引用。
InnerClass1 out = new InnerClass1();
InnerClass1.Inner outin = out.new Inner();//前面要不要前缀均可以。
Inner outin1 = out.new Inner();//前面要不要前缀均可以。
outin.inner_f1();
}
} 权限