内部类:
内部类的分类:
成员内部类
局部内部类
匿名内部类
静态内部类
一个类的内部,另外定义了一个类,那么内部的这个类,被称为内部类。
如果非静态的外部类中定义了一个静态的内部类,那么这个静态的内部类中可以定义静态的成员变量和成员方法,也可以定义非静态的成员方法和非静态的成员变量。
但是在非静态的内部类中不可以定义静态的成员变量和静态的成员方法。
内部类的静态成员和静态方法、和非静态的成员方法非静态的成员变量的访问
package Weeks03.days04_qianfeng.Test01; public class Outter { private int nums=100; static int nums1=400; int nums2=500; public static void show(){ System.out.println("This is a Outter static method"); } public void show01(){ System.out.println("This is a Outter method"); } public /*static*/ class Inner{ int a=200; //static int b=300; public /*static*/ void showInner(){ System.out.println("This is a Inner static method"); /*int nums = new Outter().nums; System.out.println(nums);*/ } public void showInner01(){ System.out.println("This is a Inner method"); } } }
package Weeks03.days04_qianfeng.Test01; public class Test { public static void main(String[] args) { Outter outter=new Outter(); System.out.println("outter.nums2="+outter.nums2); outter.show01(); System.out.println("+++++++++++++++++++"); //Outter.Inner inner=new Outter.Inner(); Outter.Inner inner = new Outter().new Inner(); int a = inner.a; System.out.println(a); inner.showInner01(); System.out.println("inner.a="+inner.a); inner.showInner01(); System.out.println("======================"); System.out.println(Outter.nums1); Outter.show(); System.out.println("+++++++++++++++++++++"); /* System.out.println(Outter.Inner.b); Outter.Inner.showInner();*/ System.out.println("***************************"); //Outter.Inner inner1 = new Outter.Inner(); //Outter.Inner inner1=new Outter.Inner(); /* inner1.showInner01(); System.out.println(inner1.a);*/ } }
如果内部类是非静态的内部类,那么在此类中不能定义静态的属性和方法
如果内部类是静态的内部类,那么在此类中可以定义静态的属性和方法,也可以定义非静态的属性和方法。
Outter.java
package Weeks03.days04_qianfeng.Test02; public class Outter { private int a=10; static int b=20; public static void show1(){ System.out.println("This is a static Outter method"); } public void show2(){ System.out.println(this.a); System.out.println("This is a Outter method"); } public static class Inner{ static int c=30; int d=40; public static void show3(){ System.out.println("This is a static Inner method"); } public void show4(){ System.out.println("This is a Inner method"); } } }
DemoTest.java
package Weeks03.days04_qianfeng.Test02; public class DemoTest { public static void main(String[] args) { /** * 如果访问外部类的非静态的属性和方法时,则利用的是对象来进行访问 */ Outter outter=new Outter(); outter.show2(); System.out.println("**********************"); /** * 如果想要访问外部类的静态的属性和方法时,则利用的是类来进行访问 */ System.out.println(Outter.b); Outter.show1(); System.out.println("**********************"); /** * 如果想要访问静态内部类的静态的属性和方法时,则首先是要利用类来访问该静态内部类, * 其次是利用类来进行对内部类的静态的属性和方法进行访问 */ //Outter.Inner.show3(); //System.out.println(Outter.Inner.c); System.out.println("**********************"); /** * 如果想要访问静态内部类的非静态的属性和方法时,则首先要利用类来访问该静态内部类, * 其次是利用对象来进行内部类的非静态的属性和方法的访问。 */ Outter.Inner inner=new Outter.Inner(); System.out.println(inner.d); inner.show4(); /** * 如果想要访问非静态的内部类中的非静态的属性和方法时,则首要要利用对象来访问该非静态的内部类 * 其次时利用对象来进行内部类的非静态的属性和方法的访问 */ /* Outter.Inner inner1 = new Outter().new Inner(); inner1.show3(); inner1.show4(); System.out.println(inner1.c); System.out.println(inner1.d);*/ } }