2018-03-09学习小结 - 关于类的专题研究3

回顾

14.1.3 对象签名hashcode()

14.1.4 使用Object接收任意引用数据类型对象

学习小结

14.2 内部类

内部类即在一个类的内部有定义了其他类的情况。

14.2.1 内部类的基本定义

内部类的定义格式如下:

标识符 class 外部类的名称{
// 外部类成员
标识符 class 内部类的名称{
// 内部类成员
}
}

内部类作用:

①内部类提供更好的封装;

②内部类成员可直接访问外部类的私有数据;

③匿名内部类适合用于创建仅需要一次的类。

范例 14-8:内部类的使用

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年3月9日 下午11:23:45
 * @Description TODO 内部类的使用
 */
public class P362_14_8 {

    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.inst();
    }

}

class Outer {
    int score = 95;

    void inst() {
        Inner in = new Inner();
        in.display();
    }

    public class Inner {
        // 在内部类中声明name属性
        String name = "张三";

        void display() {
            System.out.println("成绩:score = " + score); // 输出外部类中的属性
        }
    }
}

运行结果:

2018-03-09学习小结 - 关于类的专题研究3_第1张图片
运行结果

14.2.2 使用static定义的内部类就是外部类

使用static定义的内部类就是外部类,也称静态内部类。

范例 14-9:用static声明的内部类访问非static的外部类属性

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年3月9日 下午11:35:49
 * @Description TODO 用static声明的内部类访问非static的外部类属性
 */
public class P363_14_9 {

    public static void main(String[] args) {
        StaticInnerClassTest outer = new StaticInnerClassTest();
        outer.display();
    }

}

class StaticInnerClassTest {
    private int prop1 = 5;
    private static int prop2 = 9;

    void display() {
        StaticInnerClass in = new StaticInnerClass();
        in.display();
    }

    static class StaticInnerClass {
        // 静态内部类里可以包含静态成员
        private static int age;

        public void display() {
            // 下面代码报错
            // 静态内部类无法访问外部类的实例成员
            System.out.println(prop1);
            // 下面代码正常
            System.out.println(prop2);
        }
    }
}

运行结果:

注释报错行运行

2018-03-09学习小结 - 关于类的专题研究3_第2张图片
运行结果

规则:静态成员不能访问非静态成员。

14.2.3 在方法中定义内部类

范例 14-10:在方法中定义内部类

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年3月9日 下午11:51:06
 * @Description TODO 在方法中定义内部类
 */
public class P365_14_10 {

    public static void main(String[] args) {
        InnerClassTest outer = new InnerClassTest();
        outer.inst();
    }

}

class InnerClassTest {
    int score = 95;

    void inst() {
        class Inner {
            void display() {
                System.out.println("成绩:score = " + score);
            }
        }
        Inner in = new Inner();
        in.display();
    }
}

运行结果:

2018-03-09学习小结 - 关于类的专题研究3_第3张图片
运行结果

思考

内部类;静态成员不能访问非静态成员。


记于2018年3月10日00:02:50
Yvan

你可能感兴趣的:(2018-03-09学习小结 - 关于类的专题研究3)