java面向对象(上)-- 内部类

内部类  

  在java中,允许在一个类的内部定义类,这样的类又被称为内部类,这个内部类所在的类称作外部类。根据内部类的位置、修饰符和定义的方式可以分为成员内部类、静态内部类和方法内部类。

 

成员内部类

  在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称为成员内部类。在成员内部类中可以访问外部类的所有成员。

 1  class Outer {
 2      //定义类的成员变量
 3    private int num = 4;
 4    //下面的代码定义了一个成员内部类
 5     class Inner{
 6         void show(){
 7             //在成员内部类的方法中可以访问外部类的成员变量
 8             System.out.println("num =" + num);
 9         }
10    }
11    //下面的代码定义了一个成员方法,方法中访问成员内部类
12     public void test(){
13         Inner inner = new Inner();
14         inner.show();
15     }
16 
17 }
18 class Example {
19     public static void main(String[] args) {
20         //创建外部类对象
21         Outer outer = new Outer();
22         outer.test();
23     }
24  }

运行结果:

   从运行结果可以看出,内部类可以在外部类中被使用,并能访问外部类的成员。

  

  如果想通过外部类去访问内部类,则需通过外部类对象去创建内部类,创建内部类对的具体语法格式如下:  

    外部类名.内部类名 变量名=new 外部类名().new内部类名();

   运行结果跟上面一样,需要注意的是,如果内部类被声明为私有,外界无法访问。

 

静态内部类

   可以使用static关键字来修饰一个成员内部类,该类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化。

    外部类名.内部类名 变量名= new 外部类名.内部类名

 

 1  class Outer {
 2      //定义类的成员变量
 3    private static int num = 6;
 4    //下面的代码定义了一个静态内部类
 5    static class Inner{
 6         void show(){
 7             System.out.println("num =" + num);
 8         }
 9    }
10 
11 }
12 class Example {
13     public static void main(String[] args) {
14         //创建内部类对象
15        Outer.Inner inner = new Outer.Inner();
16        inner.show();
17     }
18  }

 

运行结果:

 

   内部类Inner使用static关键字来修饰,是一个静态内部类,可以看出静态内部类的实例化方式与非静态内部类的成员内部类的实例化方式是不一样的。

注意:

  1.在静态内部类中只能访问外部类的静态成员变量,如将变量num前面的static去掉,程序编译会报错。

  2.在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态的成员。

 

方法内部类

  方法内部类是指在方法内部定义的类,它只能在当前方法中被使用。

 1  class Outer {
 2      //定义类的成员变量
 3    private  int num = 4;
 4    public void test() {
 5        //下面是在方法中定义的类
 6         class Inner {
 7            void show() {
 8                //访问外部类的成员变量
 9                System.out.println("num =" + num);
10            }
11        }
12        Inner inner = new Inner();
13         inner.show();
14    }
15 }
16 class Example {
17     public static void main(String[] args) {
18         //创建外部类对象
19        Outer outer = new Outer();
20        //定义test方法
21        outer.test();
22     }
23  }

运行结果:

 

   在Outer类的test()方法中定义了一个内部类Inner,由于Inner是方法内部类,因此程序只能在创建该类的实例对象并调用show方法。从运行结果来看,方法内部类也可以访问外部类的成员变量num。

 

posted on 2020-07-30 10:19  北林日记  阅读(219)  评论(0编辑  收藏  举报

导航