【0716课外作业】内部类

一、

内部类(nested classes),面向对象程序设计中,可以在一个类的内部定义另一个类。嵌套类分为两种,即静态嵌套类和非静态嵌套类。静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner)。内部类是JAVA语言的主要附加部分。内部类几乎可以处于一个类内部任何位置,可以与实例变量处于同一级,或处于方法之内,甚至是一个表达式的一部分。内部类的表现形式包括:静态内部类、成员内部类 、局部内部类、匿名内部类

静态内部类指被声明为static的内部类,他可以不依赖内部类而实例,而通常的内部类需要实例化外部类,从而实例化。静态内部类不可以有与外部类有相同的类名。不能访问外部类的普通成员变量,但是可以访问静态成员变量和静态方法(包括私有类型)

一个 静态内部类去掉static 就是成员内部类,可以自由的引用外部类的属性和方法,无论是静态还是非静态。但是不可以有静态属性和方法。
 1 public class Outer {
 2 private static int i = 1;
 3 private int j = 10;
 4 public static void outer_f1() { }
 5 
 6 
 7 public void outer_f2() { }
 8 
 9 
10 // 静态内部类可以用public,protected,private修饰
11 // 静态内部类中可以定义静态或者非静态的成员
12 static class Inner {
13 static int inner_i = 100;
14 int inner_j = 200;
15 static void inner_f1() {
16 //静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)
17 System.out.println("Outer.i" + i);
18 outer_f1();
19 }
20 
21 
22 void inner_f2() {
23 // 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
24 // System.out.println("Outer.i"+j);
25 // outer_f2();
26 }
27 }
28 
29 
30 public void outer_f3() {
31 // 外部类访问内部类的静态成员:内部类.静态成员
32 System.out.println(Inner.inner_i);
33 Inner.inner_f1();
34 // 外部类访问内部类的非静态成员:实例化内部类即可
35 Inner inner = new Inner();
36 inner.inner_f2();
37 }
38 
39 
40 public static void main(String[] args) {
41 new Outer().outer_f3();
42 }
43 }

二、 作用

1)实现了更好的封装,我们知道,普通类(非内部类)的访问修饰符不能为private或protected,而内部类可以。当我们将内部类声明为private时,只有外部类可以访问内部类,很好地隐藏了内部类。

2)内部类可以继承(extends)或实现(implements)其他的类或接口,而不受外部类的影响。

3)内部类可以直接访问外部类的字段和方法,即使是用private修饰的,相反的,外部类不能直接访问内部类的成员。

原文地址:https://www.cnblogs.com/yanglanlan/p/11198873.html