Java_内部类

来源:互联网 发布:spark sql python 编辑:程序博客网 时间:2024/05/18 16:54
本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/8924845

1.内部类细节

        一般内部类是被私有修饰的 
        局部类要使用静态成员,该局部也必须是静态
        static和private用来修饰成员的,当在方法内定义类时,由于该类定义在局部,故不能被static和private修饰

       匿名内部类必须继承一个类,或者实现一个接口

2.内部类代码实现

/*内部类Strawberry2013/5/14*/class Demo{public static void main(String[] args){//Out.In  oi = new Out().new In();//如果In没有私有,则Out可以访问内部成员In//oi.show();如果内部类In没有被private修饰,则可以使用new Out().new In()创建Out out = new Out();out.show();}}class Out{private int x = 2;private class In{//private static int y = 3;静态修饰符,内部类必须为static的private int x =3; public void show(){int x = 6;System.out.println("x = "+ x);//x = 6,函数show内部xSystem.out.println("x = "+ this.x);//x = 3,本类In成员xSystem.out.println("x = "+ In.this.x);//x = 3,In类成员xSystem.out.println("x = "+ Out.this.x);//x = 2,Out类成员x//System.out.println("x = "+ Out.x);//如果外部类Out的成员x被static修饰,则可以直接使用Out.x访问}}public void method(){In in = new In();in.show();//访问In2的show方法//new In2().show();如果In2不是静态的,不能这样访问//可以将method()当做外部类的一个成员方法,In2也当做外部类的成员,//因为静态成员在类加载时,已经存在于内存中,如果In2不是静态的,则new In2()是找不到In2的类//静态方法要只能访问静态成员,故In2必须被static修饰,//由于show方法非静态,先应该new In2(),再调用show方法//new In2().show();}static class In2{void show(){//如果在主函数中调用该show方法时,由于内部类In2是静态的,Out.In2可以直接访问//由于show方法不是静态的,故必须new一个内部类,new Out.In2(),再调用show方法//new Out.In2().show();int x = 3;}}public void show()//如果show接收参数,也必须定义为final, final int x{final int y = 3;//方法区的内部类要访问方法局部变量,要被final修饰class In3//内部类不能被static和private修饰,{void show(){System.out.println("s");}}//new In3().show();}}

3.匿名内部类

/*匿名内部类必须继承一个类,或者实现一个接口*/class Demo1{public static void main(String[] args){Inter in = new Inter(){public void show(){System.out.println("haha");}};in.show();//或者new Inter(){public void show(){System.out.println("haha");}}.show();}}interface Inter{abstract public void show();}


 

原创粉丝点击