内部类_Java

news2025/1/15 12:48:34

作者:爱塔居的博客_CSDN博客-JavaSE领域博主

专栏:JavaSE

文章目录

目录

文章目录

一、内部类的概念

二、内部类的分类

1.静态内部类(被static修饰)

2.非静态内部类

 3.局部内部类

 4.匿名内部类


一、内部类的概念

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么这个内部的完整结构最好使用内部类。在Java中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。

内部类也是封装的一种体现。

public class OutClass{

 class InnerClass{

……

      }

}

🍵OutClass是外部类,InnerClass是内部类

二、内部类的分类

🥑内部类分为:

1.静态内部类

2.非静态内部类/实例内部类

3.局部内部类

4.匿名内部类

1.静态内部类(被static修饰)

静态内部类当中,不能直接访问内部类的非静态成员。

通过这个代码,我们主要注意怎么实例化对象,还有如何访问外部类的非静态变量。

class Outer {
    public int a1=1;
    private int a2=2;
    static public int a3=3;
    static class Inner{
        public int a4=4;
        private int a5=5;
     public void func(){
         Outer outer=new Outer();
         System.out.println(outer.a1);//通过引用,访问外部类的非静态成员
         System.out.println(outer.a2);
         System.out.println(a3);
         System.out.println(a4);
         System.out.println(a5);
     }
    }
}
public class Test{
    public static void main(String[] args) {
        Outer.Inner inner=new Outer.Inner();//静态内部类的实例化
        inner.func();
    }
}

2.非静态内部类

class Outer {
    public int a1=1;
    private int a2=2;
    static public int a3=3;
     class Inner{
        public int a4=4;
        private int a5=5;
       public void func(){
      Outer outer=new Outer();
           System.out.println(outer.a1);
           System.out.println(outer.a2);
         System.out.println(a3);
         System.out.println(a4);
         System.out.println(a5);
     }
    }
}
public class Test{
    public static void main(String[] args) {
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.func();
    }
}

当外部类和内部类有同名变量时:

class Outer {
    public int a1=1;
     class Inner{
        public int a1=2;
       public void func(){
      Outer outer=new Outer();
           System.out.println(outer.a1);
           System.out.println(Inner.this.a1);
     }
    }
}
public class Test{
    public static void main(String[] args) {
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.func();
    }
}

输出:

注意: 

class Outer {
    public int a1=1;
     class Inner{
      static final   public  int a1=2;//加上final就相当于常量。否则会报错。因为static静态类是不依赖对象的。
       public void func(){
      Outer outer=new Outer();
           System.out.println(outer.a1);
           System.out.println(Inner.this.a1);
     }
    }
}
public class Test{
    public static void main(String[] args) {
Outer outer=new Outer();
Outer.Inner inner=outer.new Inner();
inner.func();
    }
}

 3.局部内部类

 定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用,一般使用的非常少。

class Outer {
    public int a=1;
    public void method(){
        int b=10;
        class Inner{
            public void func(){
                Outer outer=new Outer();
                System.out.println(a);
                System.out.println(b);
            }
    }
    Inner inner=new Inner();
        inner.func();
    }
}
public class Test{
    public static void main(String[] args) {
        Outer outer=new Outer();
        outer.method();
    }
}

🍧局部内部类不能被public,static等访问修饰限定符修饰。同时,只能在该方法体内部使用,其他位置都不能使用。

 4.匿名内部类

interface  IA{
    void func();
}
class AA implements IA{
    public void func(){
        System.out.println("hello");
    }
}
public class Test{
    public static void main(String[] args) {
        new IA(){//这个类没有名字,所以叫匿名内部类
            public void func(){
                System.out.println("hi");
            }
        }.func();
    }
}

输出结果:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JVM】jvm的双亲委派机制

双亲委派机制一、JVM体系结构二、双亲委派机制的含义三、双亲委派机制的源代码四、双亲委派机制的意义五、示例代码一、JVM体系结构 我们先在这里放一张 JVM 的体系架构图,方便我们有个总体认知。 在了解JVM的双亲委派机制之前,你不得不需要知道的几个…

【Mapbox GL JS 入门】Hello world

目录Mapbox GL JS 简介安装Access tokenHello worldMapbox GL JS 简介 官网:https://www.mapbox.com/ git:https://github.com/mapbox/mapbox-gl-js/ 是一个客户端JavaScript库,为了web开发人员可以在web浏览器中动态绘制地图,在…

pico3pro使用unity播放360全景视频及事件交互

1.准备好全景视频,看起来是这样子的。 2.新建一个Materal 注意选择Shader如上图,Render Queue选择AlphaTest,因为我们要在视频前面放置按钮,UI的渲染值为3000,所以可以避免UI不显示的问题,这样UI会一直显示…

代码随想录算法训练营第四十一天| LeetCode343. 整数拆分、LeetCode96. 不同的二叉搜索树

一、LeetCode343. 整数拆分 1:题目描述(343. 整数拆分) 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 2:…

【Linux系统】网络配置保姆级教学

目录 文章目录网络配置yum install tree 安装和tree显示Linux网络配置[原理图](https://so.csdn.net/so/search?q原理图&spm1001.2101.3001.7020)查看ip和网关ipconfig查看windows网络配置ifconfig查看Linux网络配置ping测试主机之间网络连通性Linux网络环境配置**第一种方…

在 Azure AKS 上部署 EMQX MQTT 服务器集群

云进入以「应用为中心」的云原生阶段,Operator 模式的出现,为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范。针对大规模分布式物联网 MQTT 消息服务器 EMQX 全生命期管理的自动化管理工具 EMQX Kubernetes Operator&#xff0…

Android最全的setContentView源码分析

前言 我们在开发过程中,在布局文件里添加TextView,代码运行起来就可以看到对应文字显示出来,那系统是如何把我们的TextView加载并显示出来的呢? 源码分析(这里版本对应30) 第一阶段 我们直接从Activity.setContent…

《第一行代码》核心知识点:Activity(活动)

Android四大组件之一:Activity前言二、Android四大组件之一:Activity(活动)2.1 活动基本介绍2.2 活动的基本用法2.2.1 如何在应用中弹出提示信息2.2.2 如何在活动中添加Menu菜单(就一般右上角的三点)2.2.3 如何实现活动跳转2.2.5 …

CANoe-什么是Vector Tool Platform(全网唯一讲明白的文章)

在CANoe软件:Home -> Measurement下,有一个功能项,Vector Tool Platform,是做什么用的呢? 点击后打开这个功能页面,发现界面内容不多,包含:设备选择、组件更新、系统更新、远程连接,还有一个连接状态显示 从界面功能猜测:这是一个设备管理和连接的平台。那么是什么…

购买窗帘时哪些可以不做?-江南爱窗帘十大品牌

在家居软装上,窗帘的选择很重要,因为它的存在感很强,占据了墙面的半壁江山。选对了,满心欢喜,选错了,就只能悔恨痛苦了。 1.不做拼色、花纹:拼色窗帘在酒店十分常见,但是不建议照搬回…

14 C++11线程同步之条件变量

在学习条件变量之前需要先了解下std::unique_lock;条件变量 condition_variable需要配合std::unique_lock使用; std::unique_lock std::unique_lock的详细细节参考此篇文章。 C11条件变量 条件变量是 C11 提供的另外一种用于等待的同步机制,它能阻塞…

第04章_运算符

第04章_运算符 1. 算术运算符 算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加()、减(-)、乘(*)、除(/)和取模&…

使用dbeaver连接GaussDB数据库(集中式)

服务端方式登录 默认初始用户登录方式: [ommgaussdb01 ~]$ gsql -d postgres -p 30100 gsql ((GaussDB Kernel V500R002C10 build 04860477) compiled at 2022-10-28 20:04:35 commit 3892 last mr 8894 release) Non-SSL connection (SSL connection is recommen…

XAML标记扩展(3)

一、RelativeSource属性 我们进行Bingding时,如果明确知道数据源的Name,就能用Source或者ElementName进行绑定,但是有时候我们需要绑定的数据源可能没有明确的Name,此时我们就需要利 用Bingding的RelativeSource进行绑定&#xf…

虚拟数字人/直播/捏脸/3D/metahuman 实时人脸动作捕捉 开发笔记

拍照生成数字人 流程 手机(iphone xr以上)拍照(脸部),导入到unrealmetahuman做数字人 【中文】从0开始捏一个自己的虚拟人,手机扫描到MetaHuman做一个自己的虚拟人_哔哩哔哩_bilibili 涉及APP iphone …

[附源码]java毕业设计校园兼职招聘系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

YUV图像基础知识

概念 YUV和RGB的功能类似,都是用来表示图像色彩的。但是对于 YUV 所表示的图像,Y 和 UV 分量是分离的。如果只有 Y 分量而没有 UV 分离,那么图像表示的就是黑白图像。彩色电视机采用的就是 YUV 图像,解决与和黑白电视机的兼容问题…

swift枚举(二)

swift枚举(一) No-payload enums 布局比较简单&#xff0c;也好理解&#xff0c;接下来看看 Single-payload enums Single-payload enums enum IFLEnum {case test_one(Bool)case test_twocase test_threecase test_four}print(MemoryLayout<IFLEnum>.size)print(Memor…

Vue事件处理器:事件绑定基础、事件修饰符:stop、prevent、capture、self、once;

先看代码&#xff1a; <body><div id"box">{{count}}<button click"handleAdd1()">add1</button><button click"handleAdd2">add2</button></div><script>new Vue({el: "#box",dat…

关于电脑使用的实用技巧

电脑几乎是我们每天都会用到的工具&#xff0c;那么电脑的使用技巧你知道多少呢&#xff1f;今天&#xff0c;我来为大家整理了几个常用的技巧&#xff0c;希望对大家的工作或学习效率有所帮助。 技巧一&#xff1a;快速查找文档按Windows E键打开电脑中的资源管理器&#xff0…