[Java 内部类 ] 的四个知识点 《Java开发实战经典》

1, 内部类 可以声明成 public 或 private, 对其访问的限制与成员变量和成员方法完全相同
package com.qunar.basicJava.javase.p5OO;

/**
 * Author: libin.chen@qunar.com  Date: 14-5-19 11:54
 */
/**
 * 内部类 可以声明成 public 或 private, 对其访问的限制与成员变量和成员方法完全相同
 */
class Outer1 {
    private String info = "hello world!!";
    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 Outer1().fun();
    }
}
对比 1 中的,不用内部类 实现 例子1
package com.qunar.basicJava.javase.p5OO;

/**
 * Author: libin.chen@qunar.com  Date: 14-5-19 12:01
 */

/**
 * 不用内部类 实现 例子1
 */
class Outer {
    private String info = "hello world!!";
    public String getInfo() {
        return this.info;
    }
    public void fun() {
        new Inner(this).print();
    }
}
class Inner {
    private Outer out = null;
    public Inner(Outer out) {
        this.out = out;
    }
    public void print() {
        System.out.println(out.getInfo());
    }
}
public class InnerClassDemo02 {
    public static void main(String[] args) {
        new Outer().fun();
    }
}
3, 使用 static 定义内部类
package com.qunar.basicJava.javase.p5OO;

/**
 * Author: libin.chen@qunar.com  Date: 14-5-19 11:53
 */

/**
 * 使用 static 定义内部类
 */
class Outer3 {
    private static String info = "hello world!!";
    static class Inner {
        public void print() {
            System.out.println(info);
        }
    }
    public void fun() {
        new Inner().print();
    }
}
public class InnerClassDemo03 {
    public static void main(String[] args) {
        new Outer3.Inner().print();
    }
}
4, 在外部访问内部类   与   5, 在方法中定义内部类
package com.qunar.basicJava.javase.p5OO;

/**
 * Author: libin.chen@qunar.com  Date: 14-5-19 11:54
 */

/**
 * 在外部访问内部类
 */
class Outer4 {
    private String info = "hello world!!";
    class Inner {
        public void print() {
            System.out.println(info);
        }
    }
    public void fun() {
        new Inner().print();
    }
}

/**
 * 在方法中定义内部类
 */
class Outer5 {
    private String info = "hello world5!!";
    public void fun(final int temp) { // 必须是 final, 否则 WA
        class Inner {
            public void print() {
                System.out.println("类中的属性 :  " + info);
                System.out.println("方法中的属性 :  " + temp);
            }
        }
        new Inner().print();
    }
}
public class InnerClassDemo04 {
    public static void main(String[] args) {
        Outer4 out = new Outer4();
        Outer4.Inner in = out.new Inner();
        in.print();
        //------------//
        new Outer5().fun(30);
    }
}




原文地址:https://www.cnblogs.com/robbychan/p/3786763.html