从来就没有救世主  也不靠神仙皇帝  要创造人类的幸福  全靠我们自己  

java ---内部类

 

1. 成员内部类

  内部类视作一个成员:内部类没有静态成员(内部类作为一个成员,要先有一个外部类对象存在,而静态成员不依赖于对象)

  内部类可以访问其外部类所有成员

  内部类对象必须依赖于一个外部类对象,即先有外部类对象,然后才能由外部类对象来创建内部类对象。

public class Outer {
    private static String staticMember = "外部类静态变量";
    private String member = "外部类成员变量默认值";
    public static void staticMethod() {
        System.out.println("外部类静态方法");
    }
    public void ordinaryMethod(){
        System.out.println("外部类成员方法");
    }
    public void fun(){
        System.out.println("外部类");
    }
    class Inner{
        public void innerMethod(){
            System.out.println(staticMember);
            System.out.println(member);
            staticMethod();
            ordinaryMethod();
            Outer.this.fun();//调用外部类同名方法
        }
        public void fun(){
            System.out.println("内部类");
        }
    }

    public static void main(String[] args) {
        Outer a = new Outer();
        Outer.Inner b = a.new Inner(); //创建内部类对象,必须通过一个外部类对象
//        b.innerMethod();
        a.fun();
        b.fun();
    }
}

  

  有同名变量、方法时,在内部类方法中调用:

    调用内部类自己的:this.xxx

    调用外部类的:Outer.this.xxx

 

2. 静态内部类

  在内部类前加static,静态内部类中可有static成员

  将这个静态内部类看作外部类的一个静态成员就可以了(可以访问外部类的静态方法和静态变量)

  静态内部类对象不依赖于外部类对象,可以直接创建。

 

3. 局部内部类

  即在外部类的方法区域内定义的类,域成员内部类区别在于作用域不同

4. 匿名内部类

public class Outer {
    interface Inner{
        void fun();
    }
    public Inner getInner(){
        return new Inner(){
            @Override
            public void fun() {
                System.out.println("匿名内部类的方法");
            }
        };
    }

    public static void main(String[] args) {
        Outer a = new Outer();
        Inner b = a.getInner();
        b.fun();
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2022-03-01 19:12  T,X  阅读(27)  评论(0编辑  收藏  举报