内部类

发布时间 2023-06-01 22:53:16作者: 踏浪而来的人

语法:

  class Outer{//外部类

      class Inner{//内部类

      }

  }

  class Other{外部其他类

  }

类中的五大成员:

  属性、方法、构造器、代码块、内部类

 

内部类的分类(四种):

  a. 定义在外部类局部位置上(如在大括号里{},像方法、代码块)

    1. 局部内部类(有类名)

    2. 匿名内部类(没有类名)

  b. 定义在外部类的成员位置上(和属性、方法等位置相同)

    1. 成员内部类(没有static修饰)

    2. 静态内部类(有static修饰)

局部内部类:

public class LocalInnerClass{//5. 其他外部类不能访问局部内部类,即不能在这里实例化局部内部类对象
    public static void main(String[] args){
        Outer outer = new Outer();
        outer.m1();//调用m1方法,会实例化局部内部类inner,然后会调用f1方法
    }
}
class Outer{//外部类
    private int n1 = 10;
    public void m2(){
        System.out.println("Outer m2()...");
    }
    public void m1(){
        private int n1 = 80;
        //2. 局部内部类不能添加访问修饰符,但可以用final修饰,添加后就不能被其他内部类继承了
        //3. 作用域:局部内部类仅仅在定义它的方法或代码块中,在其他地方就使用不了
        class Inner{//局部内部类(本质还是一个类)
            public void f1(){
                System.out.println("n1="+n1 + "我i部内的n1="+Outer.this.n1);//1. 可以直接访问外部类的所有成员,包括私有的
                                            //6. 如果外部类和局部内部类的成员重名时,默认遵循就近原则,
                                            //如果要想使用外部类的成员,可以用 外部类.this.成员 来访问
                m2();
            }
        }
        //4. 外部类怎么访问局部内部类?在外部类的方法中,可以创建Inner对象,然后再调用内部类的方法
        Inner inner = new Inner();
        inner.f1();
    }
}

匿名内部类: