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 中的,不用内部类 实现 例子1package 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);
}
}