您的位置:首页 > 编程语言 > Java开发

Java四种内部类

2016-08-26 10:32 302 查看
参考:http://blog.csdn.net/qq435757399/article/details/7037007

四种内部类:常规内部类、静态内部类、局部内部类、匿名内部类

1、常规内部类

常规内部类没有用static修饰且定义在外部类类体中,常规内部类可以理解为类中普通的成员变量

(1)常规内部类可以访问外部类的private成员变量和方法

(2)如果要访问内部类,首先要实例化外部类outer,然后调用inner=outer.new Inner()实例化内部类

public Class Outer{
private String x="hello";
Class Inner{
public void innerMethod(){
System.out.println("x="+x);
}
}
}

public static void main(Stirng[] args){
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.innerMethod();
}


输出:

hello

2、静态内部类

使用static修饰的内部类称为静态内部类

(1)静态内部类不能访问外部类的非static成员,也不能用this关键字访问外部类成员

(2)实例化静态内部类可以直接用Outer.Inner inner=new Outer.Inner()进行实例化

public Class Outer{
private static String x="hello";
static Class Inner{
public void innerMethod(){
System.out.println("x="+x);
}
}
}

public static void main(Stirng[] args){
//Outer outer=new Outer();
Outer.Inner inner=new Outer.Inner();
inner.innerMethod();
}


3、局部内部类

在方法体或语句块(包括方法、构造方法、局部快活静态chushihu8a快)内部定义的类称为局部内部类

(1)局部内部类不能加任何访问修饰符(private、protected、public等),也不可以用static修饰,但可以用final和abstract修饰

(2)局部内部类对在方法体中有效,只能在方法体中实例化

(3)方法中的内部类可以访问外部类成员,但是方法中的外部成员必须要有final修饰

(4)static方法中定义的内部类可以访问外部定义的static成员

public class Outer {
private static  String x="hello";
public static Object makeInner(int loclaVar){
final int finalLocalVar=loclaVar;
class jubuClass{
public String toString(){
return "finalLocalVar:"+finalLocalVar+" x:"+x;
}
}
return new jubuClass(); //只能在这个方法中实例化这个内部类
}
}

public static void main(String[] args){
`   Outer outer=new Outer();
Object obj=outer.makeInner(47);
System.out.println(obj.toString());
}


输出:finalLocalVar:47 x:hello

4、匿名内部类

如果某个类的实例只是用一次,就可以将类的定义和类的创建放在一起,这就是匿名内部类

注:匿名内部类没有名字,必须继承一个父类或者实现一个接口,但是只能实现一个接口,实例化的时候使用的是父类名或者接口名

如:

new ClassOrInterfaceName(){

//类体

}

classOrInterfaceName就是父类名或者接口名

public class Outer {
private static  String x="hello";
public static Object makeInner(int loclaVar){
final int finalLocalVar=loclaVar;
return new Object(){
public String objectMethod(){
return "finallocaolvar:"+finalLocalVar;
}
};  //使用匿名内部类
}
}

public static void main(String[] args){
`   Outer outer=new Outer();
Object obj=outer.makeInner(47);
System.out.println(obj.toString());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java class