内部类

内部类

  内部类,就是在一个类里面再定义一个类,可以分为成员内部类、局部内部类、匿名内部类、嵌套内部类(static修饰)。 

  内部类是编译时的概念,编译成功后会出先两个不同的类,所以内部类的成员变量、成员方法可以是相同的。

 

成员内部类:

  成员内部类就是定义在内的里面,类似于成员方法,它可以访问外部类的所有属性、方法。

  成员内部类自己的方法、字段不可一使用static修饰。因为用static修饰的方法或字段属于自身类的,而成员内部类只有创建了外部类的对象后才能创建。

 

 1 //外部类
 2 public class Outer {
 3     public static void main(String[] args) {
 4         //创建一个外部类对象
 5         Outer outer = new Outer();
 6         //创建一个内部类对象
 7         Outer.Inner inner = outer.new Inner();
 8     }
 9     
10     //内部类
11      class Inner{
12         //static String name;//不能定义静态成员变量
13         //内部类的构造器
14         Inner() {
15             System.out.println("我是内部类");
16         }
17     }
18 }

 

局部内部类:

  局部内部类就是定义在方法或者代码块中的类,他和和成员内部类一样,但是它的作用域只在定义的方法或代码块中,超出了该范围则不能使用。

 

 1 //外部类
 2 public class Outer {
 3     public static void main(String[] args) {
 4         //在代码块中定义一个内部类
 5         {
 6             class Inner {
 7                 int a = 1;
 8                 //内部类的构造器
 9                 Inner() {
10                     System.out.println("我是内部类");
11                 }
12             }
13             //创建内部类对象
14             Inner in = new Inner();
15         }
16         //Inner in = new Inner();//错误,超出作用域范围
17     }
18 }

 

匿名内部类:

  匿名内部类其实是创建了一个类的对象,而该对象没有名字,我们有时候只需要使用一次某个类的对象时就可以使用匿名内部类。

  注意:该类是需要定义的,如果不定义会报错。

 

//外部类
public class Outer {
    public static void main(String[] args) {
        //创建一个匿名对象类并获取它的成员变量
        System.out.println(new Inner() {}.a );
    }
}
//定义一个类
class Inner {
    int a = 1;
}

 

 

 

嵌套内部类:

  使用了static修饰符修饰的成员内部类,嵌套内部类和成员内部类的不同在于,嵌套内部类可以有静态属性和方法,而成员内部类不能有

  嵌套内部类可以直接使用外部类名调用:Outer.Inner不需要创建外部类对象,也不需要创建内部类对象。

 1 //外部类
 2 public class Outer {
 3     public static void main(String[] args) {
 4         //直接使用类名访问
 5         int a = Outer.Inner.a;
 6     }
 7     static class Inner {
 8         static int a = 1;//可以有静态成员变量
 9         
10         //内部类的构造器
11         Inner() {
12             System.out.println("我是内部类");
13         }
14     }
15 }

 

 

 

 

 

posted @ 2017-10-20 13:03  那么长的代码  阅读(220)  评论(0编辑  收藏  举报