黑马程序员技术交流社区
标题:
【技术小结】java内部类
[打印本页]
作者:
tiancairc
时间:
2014-10-10 10:22
标题:
【技术小结】java内部类
听面试过的朋友说,黑马内部类比较难,问到的时候不知道怎么回答才好。所以我就把内部类的有关知识整理一下,以便面试的时候好知道该怎么做。
1、定义:顾名思义,内部类就是在类的内部定义一个类,这种特殊的类可以声明成public或者private,对其访问的限制与成员变量和成员方法完全相同。它的优点就是可以方便的访问外部类的私有属性,缺点就是打乱了一个类的基本结构。下面就是一个内部类的例子:
class Outer{
private String info=“hello world”;
class Inner{
public void print(){
System.out.println(info);
}
};
public void fun(){
new Inner().print();
}
}
public class Test{
public static void main(String args[]){
new Outer().fun();
}
}
2、使用static定义内部类
使用static也可以声明内部类,不过使用static声明的内部类就变成了外部类,此时不能访问非static的外部类属性。
class Outer{
private static String info=“hello world”;
static class Inner{
public void print(){
System.out.println(info);
}
};
};
public class Test{
public static void main(String args[]){
new Outer.Inner().print();
}
}
3、在外部访问内部类
一个内部类除了可以通过外部类访问,也可以直接在其他类中进行调用,
class Outer{
private String info=“hello world”;
class Inner{
public void print(){
System.out.println(info);
}
};
};
public class Test{
public static void main(String args[]){
Outer out=new Outer();
Outer.Inner in=out.new Inner();
on.print();
}
}
4、在方法中定义内部类
也可以在方法中定义一个内部类,但是此时内部类不能直接访问方法中的参数,如果方法中的参数要想被内部类访问,则参数前必须加上final。
class Outer{
private String info="hello";
public void fun(final int temp){
class Inner{
public void print(){
System.out.println("类中的属性:"+info);
System.out.println("类中的属性:"+temp);
}
};
new Inner().print();
}
};
public class Test{
public static void main(String args[]){
new Outer().fun(30);
}
}
5、匿名内部类
匿名内部类是指没有一个具体名称的内,此概念在接口和抽象类的应用上发展起来的。一下就是一个匿名内部类的使用例子。
interface A{
public void printInfo();
}
class X{
public void fun1(){
this.fun2(new A(){
public void printInfo(){
System.out.pritnln("hello");
}
});
}
public void fun2(A a){
a.prinInfo();
}
}
public class InnerDemo{
public static void main(String args[]){
new X().fun1();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2