2018-06-13内部类

作者: 程序员铁人 | 来源:发表于2018-06-13 14:28 被阅读14次

    今天,讲了内部类,本概念用的很少,开发中也不推介使用,但是面试题多。

    分类:静态,非静态,局部,匿名。内部类

    非静态:inner为普通的类

        1.在inner中访问outer的属性

        public class OuterClass {

        private String name = "外部类属性";

        private class InnerClass {// 成员内部类,非静态内部类

            private String name = "内部类属性";

            public void addTail() {

                // 内部类访问外部类的情况

                String name = "内部类局部变量";

                System.out.println("把    " + name + "    添加到尾巴!");

                System.out.println("把    " + this.name + "    添加到尾巴!");

                System.out.println("把    " + OuterClass.this.name + "    添加到尾巴!");

            }

        }

    2.内部类对象的创建

        此时,inner是放在outer类对象中。首先创建outer对象outer

    故OuterClass.InnerClass  inner=outer.InnerClass()

    静态内部类:  Inner用static来修饰。

        1.该inner属于outer的外部类,不再是outer的实例。故创建对象的时候较非静态有区别。

        OuterClass.InnerClass   inner=OuterClass.InnerClass();

        2.inner是static的,它只能访问outer中static的属性,不能访问实例成员。

    class Out {

        private String name = "YaoMing";

        private static int age = 34;

        static class StaticInnerClass {

            private String message = "hello world!";

            private static int num = 11;

            public void show() {

                // System.out.println(name); 不能访问

                System.out.println(age);// 可以访问

                System.out.println(new Out().name);

            }

        }

    局部内部类: 定义在方法中。

        1.局部inner只能在outer的范围内使用。 Class inner{}

        2.局部inner不能被修饰符,static修饰。

        3.局部inner不能访问非 final定义变量。也就是只能访问常量。变量的作用范围已经炒出了outer类的范围,故不能访问。

    匿名内部类:没有方法名,没有构造方法,只能用一次。

        就是newInnerClass();这样的匿名类。

    相关文章

      网友评论

        本文标题:2018-06-13内部类

        本文链接:https://www.haomeiwen.com/subject/rvujeftx.html