Java—内部类

在这里插入图片描述


Java—内部类

  • 一、内部类
  • 二、应用特点
  • 三、分类
    • 3.1、普通内部类:直接将一个类的定义放在另外一个类的类体中
    • 3.2、静态内部类
    • 3.3、局部内部类

一、内部类

一个类的定义出现在另外一个类,那么这个出现的类就叫内部类(Inner)。
内部类所在的类叫做外部类(Outer)。
在这里插入图片描述

二、应用特点

一个类对应提供的内容仅仅是为某一个类单独服务
可以直接访问外部类的私有的成员变量

三、分类

3.1、普通内部类:直接将一个类的定义放在另外一个类的类体中

1、定义格式
在这里插入图片描述
2、调用方式
在这里插入图片描述
3、特点:
普通内部类和普通类一样
普通内部类权限修饰符都可以用
创建调用普通内部类,需要外部类实例对象来创建内部类对象
final可修饰内部类

4、案例

内部类访问外部类的成员变量:外部类类名.this.id
内部类访问内部类的成员变量:this.id
直接访问id:形参中传递的id

package com.company.innerp;

public class NormalInnerDemo {
    //成员变量
    private int id = 1;
    //定义普通内部类
    public class NormalInner{
//    private class NormalInner{
        //内部类的成员变量
        private String name = "inner";
        private int id =2;

        public NormalInner(String name){
            this.name=name;
            System.out.println("普通内部类NormalInner的有参构造方法");
        }
        public NormalInner(){
            System.out.println("普通内部类NormalInner的无参构造方法");
        }
        public void show(){
            //可以直接访问外部类的私有化的成员变量
            System.out.println("外部类NormalInnerDemo变量id"+id);
            System.out.println("普通内部类NormalInner变量name"+name);
        }

        public void show1(int id){
            //可以直接访问外部类的私有化的成员变量
            System.out.println("变量id:"+id);  //形参内容  就近原则
            System.out.println("外部类id:"+ NormalInnerDemo.this.id);  //外部类的id  类名.this.id
            System.out.println("内部类id:"+ this.id);         //内部类的id    this.id
        }
    }
}
package com.company.innerp;

public class innerTest {
    public static void main(String[] args) {
        //1、外部类实例化
        NormalInnerDemo outer = new NormalInnerDemo();
        //2、普通内部类实例化
        NormalInnerDemo.NormalInner inner = outer.new NormalInner();

        //3、调用show方法
        inner.show();

        inner.show1(8);
    }
}

3.2、静态内部类

使用static修饰的内部类,属于类层级。

1、定义格式
在这里插入图片描述

2、调用方式
在这里插入图片描述
3、特点
静态内部类:不能直接访问外部类的非静态成员。
静态内部类:可以直接创建对象
如果静态内部类访问外部类中与本类同名的成员变量或者方法时,需要使用类名.的方式访问。

案例:静态内部类:不能直接访问外部类的非静态成员。
在这里插入图片描述

package com.company.innerp;

public class StaticInnerDemo {
    //成员变量
    private int id = 1;
    private static int sid = 2;

    //定义静态内部类
    public static class StaticInner{
        //内部类的成员变量
        private String name = "inner";
//        private int id =2;
        private static int sid =4;

        public StaticInner(){
            this.name=name;
            System.out.println("静态内部类StaticInner的构造方法");
        }

        public void show(){
            //可以直接访问外部类的私有化的成员变量
            System.out.println("外部类StaticInner的静态变量sid"+ sid);
            System.out.println("内部类StaticInner的成员变量sid"+ sid);

//            System.out.println("外部类StaticInner的成员变量id"+ id);
        }

        public void show1(int sid){
            System.out.println("-----------------------------------------------------");
            System.out.println("形参变量sid:"+sid);   //局部优先
            //内部类的成员id
            System.out.println("静态内部类StaticInner的静态成员变量sid值是:"+StaticInner.sid);
            System.out.println("静态外部类StaticInnerDemo的静态成员变量sid值是:"+StaticInnerDemo.sid);

        }

    }


    public static void main(String[] args) {
        StaticInnerDemo.StaticInner s=new StaticInnerDemo.StaticInner();
        s.show();
        s.show1(8);
    }
}

执行结果:

静态内部类StaticInner的构造方法
外部类StaticInner的静态变量sid4
内部类StaticInner的成员变量sid4
-----------------------------------------------------
形参变量sid8
静态内部类StaticInner的静态成员变量sid值是:4
静态外部类StaticInnerDemo的静态成员变量sid值是:2

Process finished with exit code 0

3.3、局部内部类

直接将一个类的定义放在方法体的内部
1、定义格式
在这里插入图片描述
2、调用
在这里插入图片描述
3、特点:
局部内部类只能在方法的内部可以使用
局部内部类可以在方法体内直接创建对应对象

package com.company.innerp;

public class JubuInnerDemo {
    private int aid = 2;

    public void show(){
        //定义局部内部类 局部内部类:只在当前方法体的内部使用 不能用访问修饰符
        class AreaInner{
            private int id = 1;

            public AreaInner() {
                System.out.println("局部内部类AreaInner的构造方法");
            }

            public void testArea(){
                System.out.println("局部内部类AreaInner的id的值:"+id);
                System.out.println("AreaInnerDemo的aid的值:"+aid);

            }
        }

        //声明局部内部类的引用指向局部内部类的对象
        AreaInner areaInner = new AreaInner();
        areaInner.testArea();

    }
}


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[JAVASE] 类和对象(六) -- 接口(续篇)

目录 一. Comparable接口 与 compareTo方法 1.1 Comparable接口 1.2 compareTo方法的重写 1.2.1 根据年龄进行比较 1.2.2 根据姓名进行比较 1.4 compareTo 方法 的使用 1.3 compareTo方法的缺点(重点) 二. Comparator接口 与 compare方法 2.1 Comparator接口 2.2 compare 方法…

upload-labs 21关解析

目录 一、代码审计 二、实践 三、总结 一、代码审计 $is_upload false; $msg null; if(!empty($_FILES[upload_file])){//检查MIME$allow_type array(image/jpeg,image/png,image/gif);if(!in_array($_FILES[upload_file][type],$allow_type)){$msg "禁止上传该类型…

ssms用户登陆失败,服务器处于单用户模式。目前只有一位管理员能够连接。解决方案

文章目录 问题解决方案单用户模式什么是单用户模式?为什么使用单用户模式?实现步骤 问题 连接smss的时候发现无法连接,显示 服务器处于单用户模式。目前只有一位管理员能够连接 解决方案 打开SQL Server配置管理器 右键属性 在启动参数的最…

picamera配opencv做发现移动物体后录像50秒

本来是想配合上一篇写的测距传感器数据打开摄像头录制个50秒实时画面,后来这个测距传感器(因为我是歪用,用来识别范围内的移动物体)给的数据,false alarming还是太高了。于是想到使用本人之前深恶痛绝的opencv来试一试…

getters的使用

getters的使用 如果state中的数据需要经过处理再使用,就可以利用getters函数

OFDM通信中的部分内容

纠错编码:在无线通信过程中由于传输过程存在噪声等各种非理想因素,在接收端接收到的信息往往相对于发射信息存在误码,通过纠错编码方式可以对少数非连续的误码进行判断和纠正。举个简单的例子,发射端可能发射的信息为00,01,10,11,…

python字符串入门指南:从基础到进阶

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、字符串的创建与展示 二、处理特殊情况:含有特殊字符的字符串 三、字符串拼…

Spring—Spring配置文件概念及应用(实现一个图形验证码)

文章目录 配置文件配置文件作用配置文件的格式配置文件优先级说明配置文件书写代码的格式yml文件代码的格式 Value注解 properties 缺点分析properties VS yml实现一个验证码程序 配置文件 配置文件作用 整个项目的重要信息我们都会配置在配置文件中,比如说我们数…

springboot基础篇(快速入门+要点总结)

目录 一、SpringBoot简介 二、创建SpringBoot(通过Idea脚手架搭建项目) 三、properties配置文件 properties 配置文件说明 ①. properties 基本语法 ②. 读取配置⽂件 ③. properties 缺点 2. yml 配置⽂件说明 ①. yml 基本语法 ②. yml 使用进…

easy-rule规则引擎使用

简介 轻量级的规则引擎&#xff0c;易于学习的api 简单来说&#xff0c;规则引擎就是一个函数&#xff1a;yf(x1,x2,…,xn) 将业务代码和业务规则分离&#xff0c;解耦业务决策和业务代码的绑定关系 入门示例 依赖引入 <dependency><groupId>org.jeasy</grou…

Nacos 2.x 系列【8】集成 Spring Cloud Gateway

文章目录 1. 概述1.1 API 网关1.1 Spring Cloud Gateway 2. 集成案例2.1 入门案例2.2 动态路由 1. 概述 1.1 API 网关 API网关已经成为了微服务架构的一个标配组件&#xff0c;是系统对外的唯一入口。所有的客户端都通过统一的网关接入微服务&#xff0c;在网关层处理所有非业…

Jenkins工具系列 —— 通过钉钉API 发送消息

文章目录 钉钉环境搭建使用钉钉API接口 发送消息机器人安全设置使用自定义关键词机器人安全设置使用加签方式 资料下载 钉钉环境搭建 在jenkins安装钉钉插件以及小机器人&#xff0c;这部分内容可参考&#xff1a;插件 钉钉发送消息 使用钉钉API接口 发送消息 机器人安全设置…

【全开源】分类记账小程序系统源码(ThinkPHP+FastAdmin+UniApp)

基于ThinkPHPFastAdminUniAppvk-uView-uiVue3.0开发的一款支持多人协作的记账本小程序&#xff0c;可用于家庭&#xff0c;团队&#xff0c;组织以及个人的日常收支情况记录&#xff0c;支持周月年度统计。 &#xff1a;智能管理您的财务生活 一、引言&#xff1a;财务智能化…

SSMP整合案例第三步 业务层service开发及基于Mybatis的接口功能拓展

业务层开发 对于业务层的制作有个误区 Service层接口定义与数据层接口定义具有较大差别 不要混用 业务层接口关注的是业务名称 数据层接口关注的是数据层名称 操作是不难 但是有些东西还是要掌握的 业务层接口如果是业务方法 就按照业务名称来代替 如果是数据操作 直接用…

python数据分析——数据可视化(图形绘制)

数据可视化&#xff08;图形绘制基础&#xff09; 前言一、图形绘制基础Matplotlib简介使用过程sin函数示例 二、常用图形绘制折线图的绘制plot示例 散点图的绘制scatter()示例 柱状图的绘制bar示例 箱型图绘制plot.box示例 饼状图的绘制pie示例 三、图形绘制的组合情况多个折线…

有什么普通人可以做的赚钱软件?盘点9个适合普通人长期做的软件

在这个互联网高速发展的时代&#xff0c;智能手机已经成为我们生活中不可分割的一部分。众多APP的涌现&#xff0c;使得许多朋友都在寻求通过手机赚钱的方法。 然而&#xff0c;面对市面上琳琅满目的网上赚钱APP&#xff0c;我们该如何挑选呢&#xff1f;别担心&#xff0c;今…

全国首例!云南破获域名黑产大案,抓获630人

2021年5月以来&#xff0c;在公安部的组织指挥下&#xff0c;云南公安机关历时8个多月&#xff0c;成功破获全国首例域名黑产犯罪案件&#xff0c;经全国各地公安机关连续奋战&#xff0c;共侦破案件300起&#xff0c;抓获涉案人员630人&#xff0c;查封用于黄、赌、诈等违法网…

GpuMall智算云:xinntao/Real-ESRGAN/Real-ESRGAN-v0.2.5.0

介绍 Real-ESRGAN旨在开发用于一般图像/视频恢复的实用算法。用纯合成数据训练现实世界盲人超级分辨率。我们将强大的ESRGAN扩展到一个实用的恢复应用程序&#xff08;即Real-ESRGAN&#xff09;&#xff0c;该应用程序使用纯合成数据进行训练。GpuMall智算云 | 省钱、好用、弹…

Linux(七)

Linux&#xff08;七&#xff09; 结构体---位域/位段 (为了节省空间)字节对齐:一次性分配多少个字节 (64/32)基本数据类型对齐方式结构体对齐方式:按照成员中最大的对齐方式 共用体如何定义共用体如何定义一个共用体的变量大小端什么是大端序和小端序如何测试计算机是小端序还…

京东Java社招面试题真题,最新面试题

Java中接口与抽象类的区别是什么&#xff1f; 1、定义方式&#xff1a; 接口是完全抽象的&#xff0c;只能定义抽象方法和常量&#xff0c;不能有实现&#xff1b;而抽象类可以有抽象方法和具体实现的方法&#xff0c;也可以定义成员变量。 2、实现与继承&#xff1a; 一个类…