[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); } }