23-内部类

内部类

  • 内部类就是在一个类的内部再定义一个类,比如,A类中定义一个B类,那么B类相对于A类来说就称为内部类。而A类相对B类来说就是外部类了。
  • 一个java类中可以有多个class类,但是只能有一个public class

成员内部类

public class Outer {

    private int id = 10;
    public void out(){
        System.out.println("这是外部类的方法");
    }
    public class Inner{
        public void in(){
            System.out.println("这是内部类的方法");
        }
        //获得外部类的私有属性(是正常类做不到的,但是内部类可以)
        public void getID(){
            System.out.println(id);
        }
    }
}
/*
    public static void main(String[] args) {
        //new
        Outer outer = new Outer();
        //通过外部类来实例化内部类
        Outer.Inner inner = outer.new Inner();
        inner.in();
        inner.getID();//得到外部类的私有属性(也可以私有方法)这是正常类做不到的
    }
 */

  • 当外部类、内部类存在重名属性时,会优先访问内部类属性,若想访问外部类属性,则用:外部类.this.属性
  • 成员内部类不能定义静态成员

静态内部类

  • 加上static关键字
  • 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
  • 普通类不可以用static修饰,只有内部类可以
//外部类
public class Outer {
    private String name = "xxx";
    private int age = 18;
    //静态内部类,和外部类级别相同
    static class Inner{
        private String address = "四川";
        private String phone = "111";
        public void show(){
            //调用外部类的属性--->创外部类对象
            Outer outer = new Outer();
            System.out.println(outer.name);
        }
    }
}
/*
    public static void main(String[] args) {
        //直接创建静态内部类对象
        Outer.Inner inner = new Outer.Inner();//不需要先new外部类对象
        //调用方法
        inner.show();
    }
 */

局部内部类

  • 定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法
  • 局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身相同,变量必须修饰为final(jdk1.8后默认含有)
public class Outer {
    //局部内部类
    public void method(){
        int age = 18; (默认为final int age = 18;)
        //不能加任何访问修饰符
        class Inner{
            
        }
    }

匿名内部类:不用将实例保存到变量中,可以直接new 类名().方法();

public class Test {
    public static void main(String[] args) {
        //匿名
        new Apple().eat();
    }
}
class Apple{
    public void eat(){
        System.out.println("吃");
    }
}
posted @ 2024-06-24 18:45  呆头尖瓜  阅读(1)  评论(0编辑  收藏  举报