在一篇blog:“java内部类的作用分析”中你可以了解java内部类的一些东西,不过内部类中还有一些地方值得我们细心研究...
下面是我总结出来的java内部类的一些东西,分享给大伙儿....
one:静态内部类可以有静态成员,而非静态内部类则不能有静态成员
怎样理解这个呢?
看看下面的代码:
1 /** 2 * 3 */ 4 package com.b510.test; 5 6 public class Test { 7 private int number = 1; 8 9 // 非静态内部类 可以有 非静态成员 10 private class InnerTest { 11 // error 非静态内部类不能有静态成员 12 // private static int inNumber = 2; 13 private int inNumber = 2; 14 15 public InnerTest() { 16 setNumber(2); 17 inNumber = inNumber + number; 18 System.out.println("innerTest---" + inNumber); 19 } 20 } 21 22 // Test的私有方法 23 private void setNumber(int number) { 24 this.number = number; 25 } 26 27 // 构造函数 28 public Test() { 29 InnerTest in = new InnerTest(); 30 System.out.println("test"); 31 } 32 33 public static void main(String[] args) { 34 Test test = new Test(); 35 // innerTest---4 36 // test 37 } 38 }
第一概念是不是很好理解.....
two:静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量
这里涉及到静态内部类和外部类的关系:
1 /** 2 * 3 */ 4 package com.b510.test; 5 6 public class Test { 7 private static int number = 1; 8 private String name = "test"; 9 10 // 静态 内部类 11 private static class InnerTest { 12 // 静态 内部类 可以有非静态成员 13 private int inNumber = 2; 14 15 public InnerTest() { 16 //静态内部类 可以访问 外部类 的静态成员 17 setNumber(2); 18 inNumber = inNumber + number; 19 System.out.println("innerTest---" + inNumber); 20 //error 静态内部类 不可以访问 外部类 的非静态成员 21 //System.out.println(name); 22 } 23 } 24 25 // Test的 静态 私有方法 26 private static void setNumber(int n) { 27 number = n; 28 } 29 30 // 构造函数 31 public Test() { 32 InnerTest in = new InnerTest(); 33 System.out.println("test"); 34 } 35 36 public static void main(String[] args) { 37 Test test = new Test(); 38 // innerTest---4 39 // test 40 } 41 }
这个其实很好理解的,不知道你看来代码15~23有没理解....
three:非静态内部类的非静态成员可以访问外部类的非静态变量
这个在第一个中就已经提到了:在one代码的17行
1 inNumber = inNumber + number;
number是外部类的非静态成员,inNumber作为非静态内部类的成员可以访问number
是不是很好理解....
总结一下: