内部类

内部类

写在一个类里面的类叫做内部类

内部类的分类

成员内部类/静态内部类/局部内部类/匿名内部类

成员内部类

写在成员位置的,属于外部类的成员。

成员内部类可以被一些修饰符所修饰,比如:private,默认,protected,public,static等。

在成员内部类中,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量。

public class Outer {
    String name;
    Private class Inner{
        
    }
    //因为Inner用private修饰,故需要提供给其他类创建对象的方法,用getInstance获取Inner对象给使用者
    public Inner getInstance(){
        return new Inner();
    }
}
public class test{
    public static void main(String Args[]){
        Outer o = new Outer();
        /*由于private修饰,所以不能使用Inner.oi去获取getInstance返回的对象,可以使用其父类object(超类)来接收*/
        object oi = o.getInstance();//$符号供内部类使用
        System.out.println(oi);//Outer$Inner@4eec7777
        //outer.Inner oi = new OUter().new Inner();
        //System.out.println(Outer.this.变量名);
    }
}

/内部类的堆内存中会自动生成一个“父类名.this”去记录外部类的地址/

静态内部类

静态内部类是一种特殊的成员内部类。

静态内部类只能访问外部类中的静态变量和静态方法,如果想访问非静态的需要创建外部类的对象。

创建静态内部类对象的格式:外部类名 对象名=new 外部类名.内部类名()

//new出来的对象是Inner的对象
Outer.Inner oi = new Outer.Inner();

调用非静态方法的格式:先创建对象,用对象调用

调用静态方法的格式:外部类名.内部类.方法名();

局部内部类

将内部类定义在方法里面就叫做局部内部类,类似与方法里面的局部变量。局部内部类和局部变量一样,都不能使用public,static,protected等修饰符修饰

外界是无法直接使用,需要在方法内创建局部内部类的对象并使用。

该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

pubolic class Outer{
    public void show(){
        int a = 10; 
    }
    //局部内部类
    class Inner{
        String name;
        int age;
        public void method1(){
            System.out.println("局部内部类中的method1方法");
        }       
        public static void method2(){
            System.out.println("局部内部类中的method2静态方法");
        }
    }
    //创建局部内部类的对象
    Inner i = new Inner();
    System.out.println(i.name);
    System.out.println(i.age);
    i.method1();
    Inner.method2();
}
匿名内部类(常用且重要)

匿名内部类本质上就是隐藏了名字的内部类(继承/实现、方法重写、创建对象)

example:
	//new 类名或者接口名
	new Inner() {
        //需要重写方法
        public void show() {
        }
    };//注意大括号末尾有一个分号

匿名内部类可以写在成员位置,也可以写在局部位置

匿名内部类格式的细节:1,包含了继承或实现,方法重写,创建对象。2,整体就是一个类的子类对象或者接口的实现类对象。

使用场景:当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码。

很牛逼QAQ

// Today is not easy, tomorrow is more difficult, but the day after tomorrow will be wonderful.

posted @ 2023-10-17 21:04  JenckMin  阅读(11)  评论(0编辑  收藏  举报