• 内部类和权限修饰符


    内部类:成员内部类、 静态内部类、 局部内部类、 匿名内部类

    1、内部类:在一个类的里面再定义一个类(B类表示的事物是A类的一部分,且B单独存在没有意义,比如汽车的发动机,ArrayList的迭代器,人的心脏等)

    1. package a01innerclass6;
    2. public class Car {
    3. private String carName;
    4. String carColor;
    5. int age;
    6. public void show() {
    7. Engine engine = new Engine();
    8. System.out.println(engine.engineName);
    9. }
    10. // 内部类的访问特点:
    11. // 内部类可以直接访问外部类的成员包括私有,外部类要访问内部类的成员,必须创建对象
    12. class Engine {
    13. String engineName;
    14. int engineAge;
    15. public void show() {
    16. System.out.println(engineName);
    17. System.out.println(carColor);
    18. System.out.println(carName);
    19. }
    20. }
    21. }

    2、成员内部类:

    获取成员内部类对象的两种方式:

    方式一:外部类编写方法,对外提供内部类对象

    方式二:直接创建

    格式: Outer.Inner oi = new Outer().new Inner();

    案例: 

    1. package a01innerclass6;
    2. public class Outer {
    3. private int a = 10;
    4. class Inner {
    5. private int a = 20;
    6. public void show(){
    7. int a = 30;
    8. System.out.println(a); // 30
    9. System.out.println(this.a); // 20
    10. System.out.println(Outer.this.a); // 10
    11. }
    12. }
    13. }
    14. public static void main(String[] args) {
    15. Outer.Inner oi = new Outer().new Inner();
    16. oi.show();
    17. }

    3、静态内部类

    静态内部类只能访问外部类中的静态变量静态方法,如果想要访问非静态的需要创建对象

    1. public class Outer {
    2. int a = 10;
    3. static int b = 20;
    4. // 静态内部类
    5. static class Inner {
    6. public void show1(){
    7. Outer o = new Outer();
    8. System.out.println(o.a);
    9. System.out.println(b); // 20
    10. System.out.println("非静态方法被调用了");
    11. }
    12. public static void show2(){
    13. System.out.println("静态方法被调用了");
    14. }
    15. }
    16. }
    17. public static void main(String[] args) {
    18. //创建静态内部类的对象
    19. //只要是静态的东西,都可以用类名点直接获取
    20. Outer.Inner oi = new Outer.Inner();
    21. oi.show1();
    22. //静态方法
    23. Outer.Inner.show2();
    24. }

     4、局部内部类

    1. 将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量
    2. 外界是无法直接使用,需要在方法内部创建对象并使用
    3. 该类可以直接访问外部类的成员,也可以访问方法内的局部变量

    5、匿名内部类

    本质上是隐藏了名字的内部类 

    new 类名或接口名() {
        重写方法;  
    };

    包含了继承或实现,方法重写,创建对象

    整体就是一个类的子类对象或者接口的实现类对象

    使用场景:

    当方法的参数是接口或类时

    以接口为例可以传递这个接口的实现类对象(实际上是利用接口的多态)

    如果实现类只实现一次就可以使用内部类简化代码

  • 相关阅读:
    Jenkins学习笔记
    实验二: 密码恢复
    js-读书笔记-函数式编程-applicative函数-join的实现
    微信小程序&会议OA首页-开发说明&创建项目&关于flex布局&关于尺寸单位(rpx)&关于WXS&轮播图&会议信息
    JavaScript学习(五)——首页跳转实现
    SPI机制
    CF797E Array Queries
    介绍Node.js中fs模块 代码和注释。
    C++可以这么学------>类和对象(中)
    wy的leetcode刷题记录_Day25
  • 原文地址:https://blog.csdn.net/RreamigOfGirls/article/details/126759976