在Java代碼的實現過程中,我們經常會使用內部類,內部類的使用也是非常多的,現在羅列一下當前的內部類的知識。
實現的代碼如下:
private int age;
private int year;
public static void test(){
System.out.println("OutClassType data.");
}
public class InnerNormalClass{
private int a = 1;
private int b = 2;
public InnerNormalClass(){
System.out.println("init the inner class");
// 普通內部類可以通過this關鍵字無限訪問外部類的成員變量
System.out.println("direct read OutClassType age:"+OutClassType.this.age);
test();
}
public int getA(){
System.out.println("print A.");
return a;
}
public int getB(){
System.out.println("print B.");
return b;
}
}
public static class InnnerStaticClass{
private int c = 15;
private int d = 16;
public int getC(){
System.out.println("print C.");
return c;
}
public int getD(){
return d;
}
public static void testStaticMethod(){
System.out.println("this is static inner class method.");
}
}
public void printInnnerStaticClassData(InnnerStaticClass innnerStaticClass){
System.out.println("print c:"+innnerStaticClass.c+",print d:"+innnerStaticClass.d);
}
public void printInnerNonStaticClassData(InnerNormalClass normalClass){
System.out.println("print a:"+normalClass.a+",print b:"+normalClass.b);
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
}
測試代碼如下所示:
private static void testInnerClass(){
OutClassType outClassType = new OutClassType();
// 非靜態的內部類的初始化只能使用outClassType.new的方式生成
OutClassType.InnerNormalClass innerNormalClass = outClassType.new InnerNormalClass();
// 使用內部類的對象訪問內部類成員變量
System.out.println("print the inner method:"+innerNormalClass.getA());
// 靜態內部類的初始化和和非靜態內部類的初始化不一樣,因爲不管是靜態變量還是靜態內部類都是外部類直接所有
OutClassType.InnnerStaticClass innnerStaticClass = new OutClassType.InnnerStaticClass();
System.out.println("print the static class non static method:"+innnerStaticClass.getC());
// 直接調用靜態內部類的靜態方法
OutClassType.InnnerStaticClass.testStaticMethod();
// 外部類的方法中也可以訪問靜態內部類的私有屬性
outClassType.printInnnerStaticClassData(innnerStaticClass);
// 外部類的方法中也可以訪問非靜態內部類的私有屬性
outClassType.printInnerNonStaticClassData(innerNormalClass);
}
測試結果如下所示:
init the inner classdirect read OutClassType age:0
OutClassType data.
print A.
print the inner method:1
print C.
print the static class non static method:15
this is static inner class method.
print c:15,print d:16
print a:1,print b:2