2018-06-13内部类

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

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

非静态: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内部类)