Java内部类

一、内部类

定义:定义在类内部的类

二、种类
  • 成员内部类:以定义成员变量方式定义在类内部的类,修饰权限同成员变量
  • 静态内部类:通过关键字static修饰的成员内部类
  • 局部内部类:定义在方法内部的类
  • 匿名内部类:没有名字的内部类
三、实例
interface NoName{
    public void test();
}

public class Outer {
    // 成员内部类
    private class Inner{
        public void test(){
            System.out.println("============");
        }
    }

    // 静态内部类
    private static class Inner1{
        public void test(){
            System.out.println("-------------");
        }
    }

    public void test(){
        // 局部内部类
        class Inner2{
            public void test(){
                System.out.println("-=-=-=-=-=-=-=");
            }
        }
        //局部内部类实例化
        Inner2 inner2 = new Inner2();
        inner2.test();
    }

    public NoName getNoName(){
        // 匿名内部类
        return new NoName() {
            @Override
            public void test() {
                System.out.println("------------ no-name");
            }
        };
    }

    public static void main(String[] args) {
        // 成员内部类实例化
        Outer out = new Outer();
        Inner inner = out.new Inner();
        inner.test();
        // 静态内部类实例化
        Inner1 inner1 = new Outer.Inner1();
        inner1.test();
        NoName no = out.getNoName();
        no.test();
    }
}
四、内部类特点

局部内部类和匿名内部类使用局部变量时,变量为final类型,其目的是为了保证方法内和内部类使用的是同一变量,不是为了防止内存可能出现泄漏,方法内定义的局部变量可以不加final关键字,但是反编译可以看到,被自动加上

public void test(){
        Pst p = new Pst();
        // 局部内部类
        class Inner2{
            public void test(){
                System.out.println(p);
                System.out.println("-=-=-=-=-=-=-=");
            }
        }
        System.out.println(p);
        Inner2 inner2 = new Inner2();
        inner2.test();
    }

Luyten反编译后

public void test() {
        final Pst pst = new Pst();
        System.out.println(pst);
        class Inner2
        {
            public void test() {
                System.out.println(pst);
                System.out.println("-=-=-=-=-=-=-=");
            }
        }
        new Inner2().test();
    }
五、使用场景

Java类是单继承,内部类可以解决多重继承问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。