1、用途
内部类是指类的内部再定义类,及类的嵌套,几乎所有的面向对象语言都提供这种结构。很显然,内部类会破坏结构,但为什么要提供内部类呢。实际内部类所要解决的问题就是,如何轻松地访问类中的私有成员。
假设现在有一个Outter类,一个Inner类,Inner类的对象要访问Outter类对象的私有属性。
2、先来看下不用内部类的写法
class Outter{
private String msg;
public Outter(String msg) { //构造函数给msg赋值
this.msg = msg;
}
public String getter() { //定义一个getter方法,由于向Inner下的getInfo 方法返回msg的值
return this.msg;
}
public void func(Inner inner) { //调用inner类的方法,要传Inner类的实例化对象
System.out.println(inner.getInfo());
}
}
class Inner{
private Outter outter;
public Inner(Outter outter) { //通过构造函数把Outter类的对象,传递给outter成员
this.outter = outter;
}
public String getInfo() {
return this.outter.getter();//通过Inner类中outter成员访问Inner类中getter
}
}
public class Demo{
public static void main(String[] args) {
Outter o = new Outter("Nothing's gonna change my love for you");
o.func(new Inner(o));
}
}
由此可见,以上代买涉及非常多的引用传递
3、内部类的写法
class Outter{
private String msg; //定义一个private 成员
public Outter(String msg) {
this.msg = msg;
}
public void func() {
Inner inner = new Inner(); //实例化一个内部类的对象
System.out.println(inner.getInfo()); //调用内部类对象的getInfo()方法
}
class Inner{ //定义一该内部类
public String getInfo() {
return Outter.this.msg; //内部类访问外部类的私有成员
}
}
}
public class Demo{
public static void main(String[] args) {
Outter o = new Outter("Nothing's gonna change my love for you");
o.func();
}
}
4、内部类对象的实例化方法
外部类名称.内部类名称 对象名称 = new 外部类构造方法().new 内部类构造方法();