首页 > 编程语言 >Java基础-内部类(inner class)

Java基础-内部类(inner class)

时间:2024-10-05 12:18:22浏览次数:7  
标签:Java 内部 class 访问 inner Outer public Inner

  1. 概念定义

    • 在 Java 中,内部类(Inner Class)是定义在另一个类内部的类。包含内部类的类称为外部类(Outer Class)。内部类可以访问外部类的成员(包括私有成员),并且可以提供一种将相关的类组织在一起的方式,使得代码结构更加紧凑和模块化。
  2. 内部类的种类

    • 成员内部类(Member Inner Class)
      • 定义在类的内部,和成员变量、成员方法处于同一级别。就像成员变量一样,成员内部类可以使用各种访问修饰符(publicprivateprotected)。
      • 例如:
     class Outer {
         private int outerVariable = 10;
         class Inner {
             public void accessOuterVariable() {
                 System.out.println("外部变量的值:" + outerVariable);
             }
         }
     }
  • 在这里,InnerOuter的成员内部类,它可以访问Outer类中的outerVariable
  • 静态内部类(Static Inner Class)
    • static关键字修饰的内部类。静态内部类和外部类的实例没有关联,它不能直接访问外部类的非静态成员,但可以访问外部类的静态成员。
    • 例如:
     class Outer {
         private static int staticOuterVariable = 20;
         static class StaticInner {
             public void accessStaticOuterVariable() {
                 System.out.println("外部静态变量的值:" + staticOuterVariable);
             }
         }
     }
  • 在这个例子中,StaticInnerOuter的静态内部类,它可以访问Outer类中的静态变量staticOuterVariable
  • 方法内部类(Method Inner Class)
    • 定义在方法内部的类,也称为局部内部类。它的作用域仅限于定义它的方法内部,并且可以访问方法中的局部变量(但要求这些局部变量是final的,从 Java 8 开始,实际上是隐式final)。
    • 例如:
     class Outer {
         public void outerMethod() {
             final int localVariable = 30;
             class MethodInner {
                 public void accessLocalVariable() {
                     System.out.println("局部变量的值:" + localVariable);
                 }
             }
             MethodInner mi = new MethodInner();
             mi.accessLocalVariable();
         }
     }

  • 这里,MethodInnerouterMethod方法内部的类,它可以访问outerMethod中的localVariable
  • 匿名内部类(Anonymous Inner Class)
    • 没有名字的内部类,通常用于创建只需要使用一次的类。它一般是继承一个类或者实现一个接口,并且在定义的同时创建一个实例。
    • 例如,创建一个Runnable接口的匿名内部类来创建一个线程:
     public class Main {
         public static void main(String[] args) {
             Thread thread = new Thread(new Runnable() {
                 @Override
                 public void run() {
                     System.out.println("线程正在运行");
                 }
             });
             thread.start();
         }
     }
  • 在这个例子中,new Runnable() {... }就是一个匿名内部类,它实现了Runnable接口,并且在定义的同时创建了一个实例作为Thread类的参数。
  1. 内部类的优点
    • 增强封装性:内部类可以访问外部类的私有成员,同时外部类可以控制内部类的访问权限,使得数据和行为的封装更加紧密。
    • 逻辑分组:可以将相关的类放在一起,使代码结构更清晰。例如,一个表示图形的外部类可以有内部类分别表示图形的绘制策略、计算面积策略等。
    • 实现多重继承(某种程度上):虽然 Java 不支持类的多重继承,但通过内部类可以实现类似的效果。例如,一个类可以通过内部类实现多个接口,从而具有多种行为。

标签:Java,内部,class,访问,inner,Outer,public,Inner
From: https://blog.csdn.net/weixin_62740713/article/details/142713139

相关文章

  • Java预备知识
    电脑常用快捷键Ctrl+shift切换输入法Ctrl+X剪切Ctrl+C复制Ctrl+V粘贴Ctrl+A全选Ctrl+Z撤销Alt+F4关闭窗口或网页Shift+delete永久删除不存在于回收站Window+R打开命令行车窗口**Window+E**打开我的电脑Window+Tab切换应用程序**......
  • Java日总结24-10-4:MySQL语法-DML&DQL
    一、DML操作数据---添加&修改&删除添加数据:给出我的实例:修改数据:我的修改实例:!注意:修改时如果update语句不加where条件,则会把表中所有数据都修改了!删除数据:给出我的删除实例:!注意:删除时如果语句不加where条件,则会把表中所有数据都删除。以上为DML对表的增删改操作!二......
  • 10.Java集合框架_List接口
    集合与数组的区别数组:长度开始时必须指定,而且一旦指定,不能修改。保存的必须为同一类型的元素。使用数组进行增加/删除元素比较麻烦。集合:可以动态保存任意多个对象,使用比较方便。提供了一系列方便操作对象的方法:add、remove、set、get。使用集合添加,删除新元素的代......
  • Vue Javascript 导出Excel:SheetJS/js-xlsx json_to_sheet xlsx 修改表头名称和展示的
     import*asXLSXfrom'xlsx';//展示的顺序,把data中对象的属性按照你想要的顺序排放就可以了,constheader=["pId","dID"]//展示的名称constheaderDisplay={pId:"项编号",dID:"D编号"};//将表头放剑原始数据里面去,要保证表头在数......
  • 【Java】使用Ehcache缓存。
    EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点。当我们需要频繁使用某些数据时,我们可以将这些数据放到缓存中,下次取数据的时候,直接从缓存中取,这样可以节省不少时间。如果我们自己手动进行缓存的管理将是比较棘手的的,因为这已经涉及到很多底层的技术了,但是Ehcache为我......
  • Java流程控制-选择结构
    1.if结构if单选结构语法:if(布尔表达式){//如果布尔表达式的值为true}else{//如果布尔表达式的值为false}案列:考试分数大于60分是及格,小于60分就是不及格Scannerin=newScanner(System.in);System.out.println("请输入你的成绩:");doublescore=in......
  • java计算机毕业设计高校报修系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校规模的不断扩大和校园设施的日益复杂化,传统的人工报修方式已难以满足当前高效、便捷的维修需求。高校内建筑、设备种类繁多,维修需求频繁且紧......
  • java计算机毕业设计点餐平台网站(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,人们的生活方式正经历着深刻的变革。在餐饮行业,点餐平台网站作为一种新兴的餐饮服务形式,已经逐渐渗透到人们的日常生活中。......
  • Java 文件路径/URL/URI操作汇总
    Java文件路径/URL/URI操作汇总路径操作汇总URI/相对/拒绝/路径/文件 packagecn.netkiller.test;importjava.io.File;publicclassTest{publicTest(){}publicstaticvoidmain(String[]args)throwsException{Stringpath......
  • Java Doc 生成文档
    packagecom.div.Base;/***@authorWendy*@version1.0*@since1.8*/publicclassDoc01{Stringname;//属性/***@authorWendy*@paramname*@return*@throwsException*/publi......