1,成员内部类
就是在一个类中定义一个类,注意这个内部类可以在类的成员函数中使用,也可以由外部程序调用,取决于内部类的访问级别,如果设置为private,则外部程序不能直接使用这个内部类。
- package wz.learning;
- public class Example16 {
- public static void main(String[] args) {
- Outer outer = new Outer();
- outer.test();
- //外部调用内部类,注意必须是一个实例.new 内部类的方式,
- //下面两种都是可以的。
- //Outer.Inner i = (new Outer()).new Inner();
- Outer.ClassInner i = outer.new ClassInner();
- i.show();
- }
- }
- class Outer{
- int num;
- public void test(){
- num = 5;
- ClassInner inner = new ClassInner();
- inner.show();
- }
- // 这里可以设置ClassInner为private,这样仅有Outer类可以访问
- // Class inner class
- class ClassInner{
- void show(){
- System.out.println("ClassInner num=" + num);
- }
- }
- }
2,函数内部类
在函数的内部也可以声明内部类,当然这个内部类只能在函数内部使用,并且注意,必须先声明内部类,再使用,否则编译出错。
- package wz.learning;
- public class Example16 {
- public static void main(String[] args) {
- Outer outer = new Outer();
- outer.test();
- }
- }
- class Outer{
- int num;
- public void test(){
- num = 5;
- // 这里需要先定义MethodInner,再new MethodInner();
- // Method inner class
- class MethodInner{
- void show(){
- System.out.println("MethodInner num=" + num);
- }
- }
- MethodInner inner2 = new MethodInner();
- inner2.show();
- }
- }
3,静态内部类
在一个类中,声明一个带有static关键字的内部类,这个内部类可以访问类中的静态成员变量。
- package wz.learning;
- public class Example18 {
- public static void main(String[] args) {
- Outer18.Inner inner = new Outer18.Inner();
- inner.show();
- }
- }
- class Outer18{
- private static int num=6;
- static class Inner{
- void show(){
- System.out.println("num=" + num);
- }
- }
- }