*内部类的定义:
由于在类的内部可以定义成员变量和方法,那么在类的内部再定义一个类,就称为内部类。比如在类Outer的内部再定义一个类Inner,那么Inner就称为内部类,而Outer则称为外部类。
内部类可以访问外部类的成员变量和方法:
class Outer{
private String info ="hello!";
class Inner{
public void print(){
System.out.println(info);
}
}
public void fun(){
new Inner().print(); //通过创建内部类的对象调用内部类的方法
}
}
class TestInner{
public static void main(String[] args){
new Outer().fun();
}
}
如果把内部类拿到外部,要使用访问原outer类的属性则要如下代码:
class Outer{
private String info ="hello!";
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());
}
}
class TestInner{
public static void main(String[] args){
new Outer().fun();
}
}
代码复杂了很多,所以内部类的好处就是方便访问外部类的私有属性。
*使用static定义内部类
如果将内部类声明为static类型。此内部类就成了外部类,它仍能访问原外部类的静态属性。
*在外部访问内部类
一个内部类除了可以通过外部类访问,也可以直接在其他类中进行调用,调用的基本格式为:
外部类.内部类 内部类对象 = 外部类实例.new 内部类();
以上的格式必须要找到外部类的实例化对象之后,才可以通过外部类的实例化对象去实例化内部类的对象。
例:Outer out = new Outer();
Outer.Inner in = out.new Inner();
*在方法中定义内部类
也可以在方法中定义一个内部类,但是在方法中定义的内部类不能直接访问方法中的参数,如果方法中的参数要被内部类访问,则必须加上final关键字。