4 内部类实例

news2024/12/23 20:24:16

内部类

内部类的分类:

  • 成员内部类
  • 方法内部类
  • 局部内部类
  • 匿名类
  • 静态内部类

1 成员内部类

是在一个类中声明的类,包含内部类的是外围类

成员内部类的访问权限:

  • public可以在外围类的外部使用内部类创建对象
  • private只能在外围类的内部使用内部类创建对象

创建对象:

  • 成员内部类的建立依赖于外围类,在创建内部类的时候必须先用于外部类
public class Outter_v1 {
    public static void main(String[] args) {
        Outter01 out = new Outter01();
        Outter01.Inner in = out.new Inner();
        System.out.println(out.a);
        System.out.println(out.b);
        System.out.println(in.c);
        System.out.println(in.d);
    }
}
class Outter01{
    public int a = 0;
    public int b = 1;
    public class Inner{
        public int c = 2;
        public int d = 3;
    }
}
public class Outter_v2 {
    public static void main(String[] args) {
        Outter out = new Outter();
        Base in = out.fun();
        in.output();

        System.out.println(out.a);
        System.out.println(out.b);
        //System.out.println(in.c);  接口类型只能访问接口中声明的成员
        //System.out.println(in.d);
    }
}
interface Base{
    void output();
}
class Outter{
    public int a = 0;
    public int b = 1;

    public class neuqer implements Base{
        public void output(){
            System.out.println("我是东秦学生");
        }
    }

    public neuqer fun(){
        return new neuqer();
    }
}

内部类可以直接访问外部类的成员

public class Outter_v3 {
    public static void main(String[] args) {
        Outter03 out = new Outter03();
        Outter03.Inner in = out.new Inner();
        System.out.println(out.a);
        System.out.println(out.b);
        in.fun();
    }
}
class Outter03{
    public int a = 0;
    public int b = 1;
    public class Inner{
        public int c = 2;
        public int d = 3;
        public void fun(){
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
            System.out.println(d);
        }
    }
}

2 内部类的内存结构

  • 内部类对象和外部类对象分别是两个不同的对象
  • 内部类对象依赖于外围类对象,外围类对象是内部类对象的创建者
  • 内部类对象中保存着外围类对象的一个引用,可与用来帮助内部类对象访问外围类对象的成员

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AWoPVQcM-1672287531017)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221013152930368.png)]

public class Outter_v4 {
    public static void main(String[] args) {
        ouuter04 outter = new ouuter04();
        ouuter04.inner inner = outter.new inner();

        System.out.println(outter.a);
        System.out.println(outter.b);
        
        inner.fun();

        System.out.println(outter.a);
        System.out.println(outter.b);
        System.out.println(inner.c);
        System.out.println(inner.d);
    }
}
class ouuter04{
    public int a = 0;
    public int b = 1;
    public class inner{
        public int c = 2;
        public int d = 3;
        //内部类可以直接修改和访问外部类成员
        public void fun(){
            a = 4;
            b = 5;
        }
    }
}

3 内部类常见用法

  • 隐藏类的实现细节
  • 方便实现多重继承
  • 实现外围类对于同一个接口不同实现
public class Outter_v5 {
    public static void animalCrazy(Animal an){
        an.run();
        an.say();
    }
    //加深了对于接口使用的认识
    public static void main(String[] args) {
        CreateAnimal crea = new CreateAnimal();
        Animal dog = crea.createdog();
        Animal cat = crea.crearecar();
        Animal bird = crea.createbird();
        animalCrazy(dog);
        animalCrazy(cat);
        animalCrazy(bird);
    }
}
interface Animal{
    public abstract void say();
    void run();
}
class CreateAnimal{
    private class dog_inter implements Animal {
        public void say(){
            System.out.println("汪汪汪......");
        }
        public void run(){
            System.out.println("四条腿跑");
        }
    }
    private class cat_inter implements Animal {
        public void say(){
            System.out.println("喵喵喵......");
        }
        public void run(){
            System.out.println("被追着跑");
        }
    }
    private class bird_inter implements Animal {
        public void say(){
            System.out.println("咕咕咕......");
        }
        public void run(){
            System.out.println("翅膀飞");
        }
    }
    public dog_inter createdog(){return new dog_inter();}
    public cat_inter crearecar(){return new cat_inter();}
    public bird_inter createbird(){return new bird_inter();}
}

}
}
public dog_inter createdog(){return new dog_inter();}
public cat_inter crearecar(){return new cat_inter();}
public bird_inter createbird(){return new bird_inter();}
}


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

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

相关文章

提升Mac使用性能的5大方法,都非常的好用哦~

是不是发现你的 Mac 越用运行速度会越慢?没错,任何电子设备,随着使用时间的增加,都会出现不如刚买时那么流畅的问题。Mac当然也不能例外,它的运行速度会随着使用时长的递增而有所下降,所以为 Mac 提速也是十…

CSS总结(网页布局:标准流 浮动 定位)

CSS 主要的功能是布局页面,增加标签的样式和部分交互效果。 资料来源:黑马 目录 元素显示 块级元素 行内元素 行内块元素 显示模式的转换 CSS三个特点 盒子模型 传统三种布局 标准流 浮动 结合浮动和标准流可以搭建出常见的网页布局: 清除…

Java Integer.toBinaryString() 方法源码及原理解析(进制转换、位运算)

title: Java Integer.toBinaryString() 方法源码及原理解析(进制转换、位运算) date: 2022-12-27 17:31:38 tags: Java categories:Java cover: https://cover.png feature: false 1. 使用及源码概览 Integer.toBinaryString() 方法用于将十进制整数转…

【1 - 决策树 - 案例部分:泰坦尼克号幸存者预测】菜菜sklearn机器学习

课程地址:《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现第二期:随机森林在sklearn中的实现第三期:sklearn中的数据预处理和特征工程第四期:sklearn中的降维算法…

Spring RCE漏洞CVE-2022-22965复现与JavaFx GUI图形化漏洞利用工具开发

文章目录前言一、漏洞描述二、影响范围三、漏洞复现3.1 漏洞poc四、修复建议五、图形化工具开发-Rexbb简介与使用5.1 工具使用总结前言 换了新工作,年底了比较多自学的时间,所以把今年比较经典的漏洞给复现一下,之前因为没空,只复…

python--PyCHarm里代码整体向左/右缩进

1、PyCharm 里代码整体向左缩进 鼠标选中多行代码,同时按住 Shift Tab 键,实现一次向左缩进4个字符。 2、PyCharm 里代码整体向右缩进 鼠标选中多行代码,按下 Tab 键,实现一次向右缩进4个字符。 3、PyCharm 里光标变粗 光标…

信创大提速,企业如何在高速行驶中更换“发动机”?

导读:信创替代如何平滑迁移不“翻车”? 经过多年发展,中国信创产业迎来全面提速。 2022年国家下发的79号文中,全面给出了国资信创产业发展与进度的指导,要求到2027年央企国企100%完成信创替代,替换范围涵盖…

SprintBoot实战(十一)集成 xxl-job

目录1.简介2.Maven依赖3.初始化数据库4.调度中心配置5.执行器配置6.项目结构7.访问页面8.新建定时任务9.BEAN运行模式10.GLUE(Java)运行模式1.简介 xxl-job: 是一个分布式任务调度平台。平台架构分为 “调度中心” 和 “执行器”。调度中心类似定时任务的注册中心&a…

SuperMap iDesktop 之 BIM优化流程——建筑篇

kele 一、背景介绍 BIM数据是三维系统中的常客,它具有信息完备性、信息关联性、信息一致性、 可视化、协调性、模拟性、优化性和可出图性八大特点,广受人们喜爱,但这也使得它自身数据量庞大,在项目中展示效果不尽人意&#xff0c…

SegeX MemDialog:封装好的内存对话框(非资源对话框)说明

----哆啦刘小洋 原创,转载需说明出处 2022-12-27 SegeX MemDialog1 简介2 源文件清单3 快速测试4 实现基本原理5 主要功能6 使用方法6 .1 简单界面6.2 复杂界面1 简介 SegeX组件之一:SegeX MemDialog,应用级内存对话框封装类。源码首次公开。…

IEC 60598-2-22-2021 灯具 第2-22部分- 特殊要求-应急照明灯具.

2021年12月6日,国际电工委员会发布标准IEC 60598-2-22:2021《灯具-第2-22部分:特殊要求-应急照明灯具》。IEC 60598-2-22:2021标准以IEC 60598-2-22:2021 RLV标准的形式提供,包含国际标准及其红线版本,内容显示了与前一版本相比对…

tensorflow06——正则化缓解过拟合

正则化主要是在损失函数中引入了第二个部分,模型复杂度,具体就是对w参数赋予了权值,并求和,再乘上一个超参数。 (利用给w加上权值,弱化训练数据的噪声) 大概可以理解为这个意思假设模型有两个参…

从0-1搭建流媒体系统之ZLMediaKit 安装、运行、推流、拉流

音视频开发系列 文章目录音视频开发系列前言一、ZLMediaKit是什么?二、使用过程1.编译、安装、运行2.推流、拉流总结前言 目前、比较有名的流媒体服务器有ZLMediaKit、srs、live555、eadydarwin等。因为srs是单线程服务、对于多核服务器的支持需要通过部署多个服务…

蓝牙学习七(MAC地址)

1.简介 一个BLE设备,可以使用两种类型的地址(一个BLE设备可以同时具备两种地址):Public Device Address(公共设备地址)和Random Device Address(随机设备地址)。而Random Device Add…

如何用 java 实现【二叉搜索树】

文章目录搜索树概念1. 查找操作2. 插入操作3. 删除操作4. 以上三种操作的测试5. 性能分析搜索树概念 二叉搜索树 又称 二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的 左 子树 不为空,则 左 子树上所有节点的值…

自定义神经网络入门-----Pytorch

文章目录目标检测的相关评价指标IoUmAP正例和负例准确率P召回率R准确率ACCP-R曲线--APnn.Module类全连接层感知机类使用nn.Sequential进行构造使用randn函数进行简单测试损失函数nn.functionalnn.optim模型处理网络模型库torchvision.models模型Fine-tune和save参考目标检测的相…

【STM32F4系列】【HAL库】【自制库】模拟IIC从机

介绍 本项目是利用GPIO模拟I2C的从机 网上常见的是模拟I2C主机 本项目是作为一个两个单片机之间低速通信的用法 协议介绍请看,传送门 模拟主机请看这里 从机 功能 实现I2C从机端读写寄存器 编程思路 I2C的从机实现比起主机来麻烦一些 因为SCL的时序是由主机发送,从机需…

【nowcoder】笔试强训Day12

目录 一、选择题 二、编程题 2.1二进制插入 2.2 查找组成一个偶数最接近的两个素数 一、选择题 1.以下方法,哪个不是对add方法的重载? public class Test {public void add( int x,int y,int z){} } A. public int add(int x,int y,float z){return 0;} B.…

Go语言设计与实现 -- WaitGroup, Once, Cond

WaitGroup 我们可以通过 sync.WaitGroup 将原本顺序执行的代码在多个 Goroutine 中并发执行,加快程序处理的速度。 我们来看一下sync.WaitGroup的结构体: type WaitGroup struct {//保证WaitGroup不会被开发者通过再赋值的方式复制noCopy noCopy// 64-…

重学redux之Redux-Thunk高级使用(三)

这是第三篇了,哥们,如果没看过前两篇,可以去看看之前的两篇,有基础的可以直接看,不多说,直接开讲 默认情况下,Redux 的动作是同步调度的,对于任何需要与外部 API 通信或执行副作用的应用程序来说都是一个问题。 Redux 允许中间件位于被分派的动作和到达 reducer 的动…