Java面向对象10——内部类知识点总结

简介: Java面向对象10——内部类知识点总结

一、前言


本文将讲述有关内部类的知识点


二、内部类定义


内部类:在一个类的里面再定义一个类


public class Outer{
  public class Inner{
  ···
  }
}


三、内部类简单应用


需求:写一个JavaBean类描述汽车

属性:汽车品牌、颜色,发动机品牌、使用年限


这时候我们定义成员属性的时候,除了carName、carColour,还有engineName、engineAge如果我们写一个Car类的话,后面两个属性就没办法定义在这个类中,只能重新写一个Engine类,但是由于发动机又是车的一部分,所以要把Engine类放到Car类中,这时候Engine类就是内部类了


public class Car{
  String carName;
  String carColour;
  class Engine{
    String engineName;
    int engineAge;
  }
}


四、内部类特点


  • 外部类一部分
  • 单独出现没有意义
  • 可以直接访问外部类成员,私有化成员变量也可以访问
  • 外部类不能直接访问内部类对象,要先创建对象


五、内部类分类


  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类(重点使用)


六、成员内部类


1.书写


  • 写在成员位置,属于外部类的成员
  • 可以被修饰符修饰


2.创建成员内部类对象


  • 当成员内部类被private修饰时,在外部类中编写方法,对外提供内部类对象
  • 直接创建


外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();


3.获外部类成员变


out.this.变量名


4.实例


public class Outer{
  private int a = 10;
  class Inner{
    int a = 20;
    System.out.println(Outer.this.a);
    System.out.println(this.a);
    System.out.println(a);
  }
}


输出的结果为:10、20、30


5.内存图


4dba8fddc06449809e731ec67792de4a.png


静态内部类


1.特点


  • 静态内部类是一种特殊的成员内部类
  • 有static修饰,属于外部类本身的
  • 总结:静态内部类与其他类的用法完全一样。只是访问的时候需要加上外部类.内部类


2.注意点


  • 可以直接访问外部类的静态成员
  • 不可以直接访问外部类的非静态成员,如果要访问需要创建外部类的对象
  • 静态内部类中没有Outer.this


3.使用格式


外部类.内部类


4.静态内部类对象的创建格式


外部类.内部类  变量 = new  外部类.内部类构造器;


5.调用方法的格式


  • 调用非静态方法的格式:先创建对象,用对象调用
  • 调用静态方法的格式:外部类名.内部类名.方法名()


八、局部内部类


1.定义


  • 定义在方法中的类

2.格式


class 外部类名 {
  数据类型 变量名;
  修饰符 返回值类型 方法名(参数列表) {
    // …
    class 内部类 {
      // 成员变量
      // 成员方法
    }
  }
}


九、结语


下一篇文章中我们将介绍匿名内部类相关知识点,也是在编写程序时非常重要的一个知识

相关文章
|
17天前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
25 0
|
9天前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
22 6
|
26天前
|
Java
Java面向对象(二)
Java面向对象(二)
|
26天前
|
Java 编译器
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
Java面向对象(三)详解: 封装 | 继承 | 方法重写 | 抽象类
|
26天前
|
Java
Java面向对象 ( 多态 | final关键字 | 接口 )
Java面向对象 ( 多态 | final关键字 | 接口 )
|
26天前
|
Java
Java面向对象 ( 类与对象 | 构造方法 | 方法的重载 )
Java面向对象 ( 类与对象 | 构造方法 | 方法的重载 )
|
15天前
|
Java 大数据 API
Java语言的核心知识点与特性
Java 是一种广泛使用的编程语言,自 1995 年发布以来,它已经成为了企业级应用开发、移动应用开发、大数据处理和云计算等领域的主流技术。
22 0
|
16天前
|
存储 并行计算 安全
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
Java面试题:Java内存管理、多线程与并发框架的面试题解析与知识点梳理,深入Java内存模型与垃圾回收机制,Java多线程机制与线程安全,Java并发工具包与框架的应用
20 0
|
17天前
|
Java
Java面试题:Java内存模型与并发编程知识点,解释Java中“happens-before”的关系,分析Java中的内存一致性效应(Memory Consistency Effects)及其重要性
Java面试题:Java内存模型与并发编程知识点,解释Java中“happens-before”的关系,分析Java中的内存一致性效应(Memory Consistency Effects)及其重要性
12 0
|
25天前
|
Java
Java面向对象知识总结+思维导图
Java面向对象知识总结+思维导图