Java四种内部类

参考: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());
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值