在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