java笔记(三)

内部类
    如果内部类是静态的,内部函数也是静态的可以直接访问
    如果内部类的有静态成员,必须将内部类也用静态类修饰
package com.laio.demo;

public class demo5 {
    public static void main(String[] args) {
        new Outer_demo5().methord();

        //内部类静态方法的使用
        Static_Outer.Inner a = new Static_Outer.Inner();
        a.mehord();
        new Outer_jubu().methord();

    }

}

class Outer_demo5{
    int num =3;
    class Inner{
        int num = 4;
        void show(){
            int num = 5;
            System.out.println(num);//调用当前类里面的
            System.out.println(this.num);//用this 代表调用本类里面的
            System.out.println(Outer_demo5.this.num);//调用外部类的数据
        }
    }
    void methord(){
        new Inner().show();
    }


}

class Static_Outer{


    //内部类可以使用修饰符进行限定
    static class Inner{
        static void mehord(){
            int num =9;
            System.out.println(num);
        }
    }
}

//内部类可以存放在局部位置,例如外部类的方法中

class Outer_jubu{
    int nunm=3;
    void methord(){
        final int x = 9;
        class Inner{
            void show(){
                System.out.println("show +..."+x);
            }
        }
        //因为定义在方法的内部,所以实例化在方法的内部
        Inner a = new Inner();
        a.show();
    }


}

     

 

        结果为5 4
       内部类可以存放在局部位置上

    

     匿名内部类 就是内部类的简写方式
内部类必须继承或者实现一个外部类的接口
匿名内部类其实就是一个匿名子类对象

 

new 父类型{
实现方法
}

 

package com.laio.demo;

//匿名内部类的使用
//匿名内部类 就是内部类的简写方式
//        内部类必须继承或者实现一个外部类的接口
//        匿名内部类其实就是一个匿名子类对象
//        new 父类型{
//        实现方法
//        }.调用的函数名()
public class demo6 {

    public static void main(String[] args) {
       new Outer_demo6().show();
       new Outer_demo6().methord();
    }
}

interface test{
    public abstract void show1();

    public abstract void show2();
}


class Outer_demo6{
    int num = 9;
    //方法一 如果有多个方法调用比较麻烦
    void show(){
        new test(){
            public void show1(){
                System.out.println(num);
            }
            public void show2(){
                System.out.println(num+'1');
            }
        }.show1();
    }
//    /方法二
    void methord(){
        test a = new test() {
            @Override
            public void show1() {
                System.out.println(num);
            }
            @Override
            public void show2() {
                System.out.println(num+'1');
            }
        };
        a.show1();
        a.show2();
    }
}

 

 

 

 

 

 

发表评论