内部类:
在一个类的内部还有另外一个类,称为内部类;
class
外部类
{
class
内部类
{
}
}
|
一个内部类的代码:
class Outer{
private String info = "hello world!!!" ;
class Inner{
public void print(){
System.out.println(info) ;
}
};
public void fun(){
new Inner().print() ;
}
};
public class Demo20{
public static void main(String args[]){
new Outer().fun() ;
}
};
|
内部类的缺点;
· 一直提倡要编写简单代码,如果按此代码形式,可以发现如果使用了内部类,则代码形式混乱。
内部类的优点:
将前代码中的内部类拿到外面来,实现同样的功能,代码如下:
class Outer{
private String info = "hello world!!!" ;
public void fun(){
new Inner(this).print() ;
}
public String getInfo(){
return this.info ;
}
};
class Inner{
private Outer out = null ;
public Inner(Outer out){
this.out = out ;
}
public void print(){
System.out.println(this.out.getInfo()) ;
}
};
public class Demo21{
public static void main(String args[]){
new Outer().fun() ;
}
};
|
以上红颜色的部分就是要增加的代码,使用内部类可以方便的访问外部类中的私有属性。如果变为两个类了,则就要互相传递引用了。
内部类生成之后的*.class文件:Outer$Inner.class
那么,如果现在要是直接在程序的外部访问内部类的话,就必须使用外部类.内部类,才可以找到内部类。
class Outer{
private String info = "hello world!!!" ;
class Inner{
public void print(){
System.out.println(info) ;
}
};
};
public class Demo22{
public static void main(String args[]){
Outer out = new Outer() ;
//
外部类
.
内部类
内部类对象
=
外部类实例
.
内部类实例
Outer.Inner in = out.new Inner() ;
in.print() ;
}
};
|
除此之外,内部类也可以在一个方法进行定义。
class Outer{
private String info = "hello world!!!" ;
//
如果想让方法中定义的内部类,访问此参数,则此参数前加一个修饰
——
final
public void fun(final int temp){
//
直接在方法中定义内部类
class Inner{
public void print(){
//
此处,方法中定义的内部类可以直接访问外部类中定义的属性
System.out.println(info) ;
System.out.println(temp) ;
}
};
new Inner().print() ;
}
};
public class Demo23{
public static void main(String args[]){
new Outer().fun(30) ;
}
};
|
本文转自 李兴华 51CTO博客,原文链接:http://blog.51cto.com/lixinghua/91241,如需转载请自行联系原作者