内部类 把一个类的定义放在另一个类定义内部的类。
1.外部类创建内部类
package main.java.innerclass;
public class Outer {
/**
* 简单内部类,包可见
*
*
*/
class Inner {
private String name = "inner1";
public String toString() {
return name;
}
}
/**
* 简单内部类,仅外部类自己可见,其他类不可获取此类实例的引用
*
*/
private class PrivateInner {
private String name = "inner1";
public String toString() {
return name;
}
}
/**
* 在外部类的非静态方法中使用内部类,和使用普通类无区别
*/
public void useInnerClass() {
Inner inner1 = new Inner();
System.out.println(inner1);
}
/**
* 外部类返回一个内部类的引用 常用用法
*
* @return
*/
public Inner getInnerInstance() {
return new Inner();
}
/**
* 在外部类的静态方法中得到一个内部类的引用
*
* @param args
*/
public static void main(String[] args) {
Outer outer = new Outer();
/**
* 只能在存在外部类实例时创建内部类实例
*/
Inner inner1=outer.new Inner();
/**
* 报错,不存在外部类实例,不能直接获取内部类实例的引用
*/
//Inner inner2=new Inner();
}
}
2.其他类创建内部类
与外部类创建内部类的区别在于:
需要使用外部类名.内部类名的方式获取引用。
不能获取作用域外的内部类的引用,如private类型内部类,以及不在同一个包内的 默认类型的内部类引用。
package main.java.innerclass;
public class Normal {
public static void main(String[] args)
{
Outer outer=new Outer();
/**
* 报错,找不到Inner这个类型
*/
//Inner inner=new Inner();
/**
* 需要外部类名.内部类名的方式获取引用
*/
Outer.Inner inner1=outer.getInnerInstance();
/**
* 通过外部类实例使用new关键字创建内部类实例。
*/
Outer.Inner inner2=outer.new Inner();
}
}