静态成员类和非静态成员类有什么区别?什么是匿名内部类?(转)

1、静态内部类(static inner classes)
最简单的内部类。只能访问外部类的静态成员变量与静态方法。生成静态内部类对象的方法:OuterClass.InnerClass inner = new OuterClass.InnerClass();

1.1、相关使用例子:

静态内部类:

class StaticInner{
    private static int a = 1;

    /**
   * 静态内部类
   * 生成的类名:StaticInner$InnerClass
   */
    public static class InnerClass{
        //静态内部类可以声明静态的成员变量,其他的内部类不可以
        private static int b = 1;
        public void execute(){
            //静态内部类只能访问静态程序
            System.out.println(a + b);
        }
    }
}

main方法中使用:

 public static void main(String[] args) {
 //创建静态内部类
 StaticInner.InnerClass innerClass = new StaticInner.InnerClass();
  innerClass.execute();
 }

2、成员内部类(member inner classes):
成员内部类可以访问外部类的静态与非静态的方法和成员变量。
生成成员内部类对象的方法:OuterClass.InnerClass inner = new OuterClass().new InnerClass();
在局部内部类中访问外部类的成员变量的方法:OuterClass.this.a;

2.1、相关使用例子:
成员内部类:

class MemberInner{
    private int a = 1;

    public void execute(){
        //在外部类中创建成员内部类
        InnerClass innerClass = this.new InnerClass();
    }

    /**
 * 成员内部类
 */
    public class InnerClass{

        //内部类可以创建与外部类同名的成员变量
        private int a = 2;

        public void execute(){
            //this引用的是内部类
            System.out.println(this.a);
            //在内部了中使用外部类的成员变量的方法
            System.out.println(MemberInner.this.a);
        }
    }
}

在main方法中使用:

 public static void main(String[] args) {
 //创建成员内部类
 MemberInner.InnerClass innerClass = new MemberInner().new InnerClass();
  innerClass.execute();
 }

3、局部内部类(local inner classes):
类似于局部变量,不能定义为public,protected,private或者static类型。
定义方法中,只能方法中声明为final类型的变量。
3.1、相关使用例子:
局部内部类:

class LocalInner{

    public void execute(){
        final int a = 1;
        /**
 * 创建局部内部类
 */
        class InnerClass{
            public void execute(){
                System.out.println("LocalInner Class");

                //局部内部类只能访问final类型的变量
                System.out.println(a);
            }
        }
        //只能在所在方法区域创建
        new InnerClass().execute();
    }
}

在main方法中使用:

 public static void main(String[] args) {
 //外部不能直接创建局部内部类
 LocalInner localInner = new LocalInner();
  localInner.execute();
 }

4、匿名内部类(anonymous inner classes):
匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。
匿名内部类会隐式地继承一个父类或实现一个接口。
4.1、相关使用例子:

public static void main(String[] args) {
    AnonymousInnerClassTest test = new AnonymousInnerClassTest();

    /**
 * 创建匿名内部类
 * 生成的类名:AnonymousInnerClassTest$1
 */
    test.print(new Date(){
        //重写toString()方法
        @Override
        public String toString() {
            return "Hello world.";
        }
    });

    JButton button = new JButton();

    /**
 * 创建匿名内部类
 * 该匿名内部类实现ActionListener接口
 * 生成的类名:AnonymousInnerClassTest$1
 */
    button.addActionListener(new ActionListener(){
        //实现接口中的方法
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("使用匿名内部类实现ActionListener接口");
        }
    });
}

public void print(Date date){
    System.out.println(date);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java 内部类 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成...
    ikaroskun阅读 5,060评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,627评论 18 399
  • 今天整理一下内部类,其中包含了内部类的特殊形式,对比普通类有什么区别和作用,内部类和外围类之间的联系,内部类的扩展...
    _小二_阅读 4,039评论 0 3
  • Advanced Language Features 知识点:一. static修饰符 static修饰符可以用来...
    风景凉阅读 3,290评论 0 0
  • 表层习惯完成情况:早起(高)听力(中)阅读(低) 明确方向摆正心态撸起袖子干 好好加油 可以的, 明天四级加油 晚安
    呀呀呀呀呀dream阅读 1,621评论 0 0

友情链接更多精彩内容