内部类

转载:wangbokun  http://www.cnblogs.com/bokun-wang/archive/2011/12/02/2272091.html

1.内部类的今本定义

   在类内部可定义成员变量与方法,而且在类内部也可以定义另一个类。如果在类Outer的内部定义一个Inner,此时类Inner就成为内部类,而Outer则成为外部类。

内部累可声明成public或private。当内部累声明成public或者private时,对其访问的限制与成员变量和成员方法相同。下面列出了内部累的定义格式:

【内部类的声明格式】

  标识符 class 外部类的名称{

    //外部类的成员

    标识符class内部类的名称{

    //内部累的成员

  }

}

范例:定义内部类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package test;
 
class Outer {//定义外部类
    private String info = "hello word";//定义外部类的素有属性
 
    class Inner {              //定义内部类
        public void print() {//内部类的方法
            System.out.println(info);//直接访问外部类私有属性
        }
    };
 
    public void fun() {              //定义方法
        new Inner().print();//通过内部累对象调用方法
    }
};
 
public class InnerClassDemo01 {
    public static void main(String args[]) {
        new Outer().fun();          //调用外部类的fun()方法
    }
}

  结果:

  hello word

内部类的唯一好处:就是可以方便的访问外部类中的私有属性。

2.使用static定义内部类

使用static可以声明属性或方法,而使用static也可以声明内部类,用static声明的内部类变成了外部类,但是static声明的内部类不能访问非static的外部类属性,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package test;
 
class Outer {// 定义外部类
    private static String info = "hello word";// 定义外部类的素有属性
 
    static class Inner { // 使用static定义内部类为外部类
        public void print() {
            System.out.println(info);
        }
    };
};
 
public class InnerClassDemo01 {
    public static void main(String args[]) {
        new Outer.Inner().print(); // 访问内部类
    }
}

  

3.在外部访问内部类

【在外部访问内部类】

外部类.内部类  内部类对象=外部类实例.new   内部类();

首先要找到外部类的实例化对象之后才可以通过外部类的实例化对像去实例化内部类的对象。

例子:

package test1;
 
class Outer {
    private String info = "hello word!!!";
 
    class Inner {
        public void print() {
            System.out.println(info);
        }
    }
}
 
public class InnerClassDemo04 {
    public static void main(String args[]) {
        Outer out = new Outer();
        Outer.Inner in = out.new Inner();
        in.print();
    }
}

  结果:

hello word!!!

4.在方法中定义内部类

也可以在方法中定义一个内部类,但是在方法定义的内部类不能直接访问方法中的参数,如果方法中的参数要想被内部类所访问,则参数前必须加上final关键字。

范例:在方法中定义内部类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package test2;
 
class Outer {
    private String info = "hello  word!!!";
 
    public void fun(final int temp) {
        class Inner {
            public void print() {                           //方法中定义一个内部类
                System.out.println("类中的属性:" + info);
                System.out.println("方法中的参数:" + temp);
            }
        }
        ;
        new Inner().print();
    }
}
 
public class InnerClassDemo05 {
    public static void main(String args[]) {
        new Outer().fun(30);
    }
}

  结果:

类中的属性:hello word!!! 方法中的参数:30

原文地址:https://www.cnblogs.com/lm3306/p/3274648.html