Java基础:内部类

可以将一个类的定义放在另一个类的定义内部,这就是内部类
——《Java编程思想》
java中,内部类可分为四类:

  1. 成员内部类
  2. 方法内部类
  3. 匿名内部类
  4. 静态内部类

成员内部类

成员内部类是最普通的内部类:

public class OutClass {
    private String out;
    public String name = "out";

    public InnerClass getInner(){
        return new InnerClass();
    }
    public class InnerClass {
        private String inner;
        public String name = "inner";

        public String getOutName() {
            //访问外部类变量
            return OutClass.this.name;
        }

        public String getInnerName() {

            return name;
        }
    }
}

复制代码

InnerClass
就是一个内部类,它就像外部类 OutClass
的一个成员,可以无限制的访问外部类的成员变量和方法。
不过需要注意的是,当当成员内部类拥有和外部类同名的成员变量或者方法时(例如代码中的 name
),当通过内部类访问该变量时默认情况下访问的是成员内部类的成员。如果需要访问外部类的变量,则需要: OutClass.this.name

外部类如果想要访问内部类的成员变量和函数,必须先创建一个成员内部类的对象,然后再通过该对象的引用进行访问。
如果要创建内部类,必须存在一个外部类的对象:

OutClass.InnerClass innerClass1 = outClass.getInner();
OutClass.InnerClass innerClass2 = outClass.new InnerClass();
复制代码

和成员变量一样,内部类可以拥有private访问权限、protected访问权限、public修饰。

方法内部类

一个方法或者一个作用域里面的类,就是方法内部类。

private Object fun() {
        class Fun {

        }
        return new Fun();
    }
复制代码

它的访问权限仅限于方法内,是不能有public、protected、private以及static修饰符的。

匿名内部类

作为Android开发者,接触的最多的内部类就是匿名内部类,没错,就在编写事件监听的代码时就是使用匿名内部类:

view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               
        });
复制代码

大部分匿名内部类用于接口回调,匿名内部类也是不能有访问修饰符和static修饰符的。匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。

静态内部类

静态内部类也是定义在另一个类里面的类,如果把成员内部类理解为成员变量,那么久可以把静态内部类理解为静态成员变量。静态内部类不可以外部类的非static成员变量或者方法。

public class OutClass {
    private String out;
    public String name = "out";

    public InnerClass getInner(){
        return new InnerClass();
    }
    static class InnerClass {
        private String inner;
        public String name = "inner";
        
    }
}

//初始化
OutClass.InnerClass innerClass = new OutClass.InnerClass();
复制代码

原文 

https://juejin.im/post/5dd4af3bf265da0bab2f5ca7

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java基础:内部类

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址