课时125:内部类基本概念

简介: 内部类的基本概念、使用以及优点1.内部类的基本概念 2.内部类的基本定义与操作示例3.内部类优点

课时125:内部类基本概念

 

摘要:内部类的基本概念、使用以及优点

1.内部类的基本概念

2.内部类的基本定义与操作示例

3.内部类优点

 

01.内部类的基本概念

 

在Java中,类的基本组成是成员属性与方法。同时,在任何编程语言里,结构通常是允许嵌套的。所以当在一个类的内部定义其他类时,这样的类就被称为内部类。

 

02.内部类的基本定义与操作示例

 

内部类其本身是一个独立且完善的类结构,在一个类的内部除了属性和方法之外还可以继续使用Class定义内部类。

以下通过一段代码来展示内部类的基本定义和操作形式:

class Outer {     // 外部类
    private String msg = "www.mldn,cn";     // 私有成员属性
public viod fun() {     // 普通方法
    Inner in = new Inner() ;     // 实例化内部类对象
    in.print() ;     // 调用内部类方法
}
class Inner {     // 在Outer类的内部定义了Inner类
    public viod print() {
        System.out.println(Outer.this.msg) ;// Outer类中的属性
    }
}
} 
public class JavaDemo {
    public static void main(String args[ ]) {
        Outer out = new Outer();     // 实例化外部类对象
        out.fun();     // 调用外部类中的方法
    }
}

image.png

在上述代码中:

(1) 首先定义了一个外部类Outer,其中包含一个私有成员属性MSG和一个普通方法Fun。

(2) 在Outer类的内部定义了一个内部类Inner,Inner类中有一个Print方法,用于输出外部类Outer中的私有属性Msg。

(3) 在Outer类的Fun方法中,实例化了内部类Inner的对象,并调用了Print方法。

(4) 最后在主程序中实例化Outer类的对象,并调用其Fun方法,从而实现了内部类的基本操作。

实际上从整个的代码上发现内部类的结构并不难理解,甚至可以说其结构与普通类一样清晰明了。那么为什么会提供有内部类这样的结构呢?

因为从整体的代码结构上来讲内部类的结构并不合理,所以内部类本身最大的缺陷在于破坏了程序的结构,但是破坏需要有目的的破坏,那么它也一定会有其优势,如果要想更好的观察出内部类的优势,就可以将这个内部类拿到外面来。


代码示例: 

class Outer {    // 外部类
    private String msg = "www.mldn.cn";    // 私有成员属性
    public void fun() {     // 普通方法
        // 思考五:需要将当前对象Outer传递到Inner类之中
        Inner in = new Inner(this);    // 实例化内部类对象
        in.print();    // 调用内部类方法
    }
    // 思考一:msg属性如果要被外部访问需要提供有getter方法
    public String getMsg() {
        return this.msg;
    }
}
class Inner {     // 在Outer类的内部定义了Inner类
    // 思考三:Inner这个类对象实例化的时候需要Outer类的引用
    private Outer out;
    // 思考四:应该通过Inner类的构造方法获取Outer类对象
    public Inner(Outer out) {
        this.out = out;
    }
public void print() {
        // 思考二:如果要想调用外部类中的getter方法,那么一定需要有Outer类对象
        System.out.println(this.out.getMsg()); // Outer类中的属性
}
}
public class JavaDemo {
    public static void main(String args[ ]) {
        Outer out = new Outer();    // 实例化外部类对象
        out.fun();    // 调用外部类中的方法
    }
}

image.png

 

03.内部类优点

 

从以上整体的操作中可以发现,其主要目的就是为了让Inner这个内部类可以访问Outer这个类中的私有属性。


但是如果不用内部类的时候整体代码就会变得非常的麻烦,所以可以得出内部类的优点:轻松的访问外部类中的私有属性。

相关文章
|
语音技术
从语音信号处理角度解读mic规格书
对于语音信号处理来说,输入音频数据的质量很重要。而mic作为声音的采集设备,会直接影响采集到声音的质量。虽然mic选型是硬件或者声学方面的工作重点,但是对于从事语音信号处理相关人员来说,理解mic规格书中的一些技术指标也是大有裨益的。本文结合国家标准对mic规格书中的一些指标进行说明。
从语音信号处理角度解读mic规格书
|
JSON 自然语言处理 数据库
数据库-ElasticSearch入门(索引、文档、查询)
数据库-ElasticSearch入门(索引、文档、查询)
556 0
|
8月前
|
Java
课时131:方法引用
课时131介绍了Java面向对象编程中的方法引用。方法引用是基于Lambda表达式的扩充,支持静态方法、实例方法、特定类型方法和构造方法的引用。通过函数式接口,方法引用可以简化代码并提高可读性。范例展示了如何引用静态方法(如`String.valueOf()`)、实例方法(如`String.toUpperCase()`)、特定类型方法(如`String.compareTo()`)和构造方法(如`Person::new`)。方法引用增强了对引用的支持功能,使代码更加简洁和灵活。
105 1
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
261 2
|
8月前
|
人工智能 弹性计算 自然语言处理
5分钟部署,解锁100种和AI大模型的交互可能
阿里云弹性计算推出了一套高效、易用的个人AI大模型部署方案,帮助用户快速搭建专属的AI主页,开启智能化新体验,真正的实把“AI玩出花”。
|
存储 关系型数据库 MySQL
MySQL数据库碎片化:隐患与解决策略
UUID作为主键可能导致MySQL存储碎片,影响性能。频繁的DML操作、字段长度变化和非顺序插入(如UUID)都会造成碎片。碎片增加磁盘I/O,降低查询效率,浪费空间,影响备份速度。建议使用自增ID,固定长度字段,并适时运行OPTIMIZE TABLE来减少碎片。
|
11月前
|
网络协议 安全 Linux
Linux剪裁探索初探
本文深入探讨了Linux剪裁的概念、方法、实践及其好处。Linux剪裁通过移除内核中不必要的模块和功能,减小内核大小、优化系统性能并提升安全性,特别适用于资源受限的设备和特定用途的服务器。文章详细介绍了配置内核选项、模块化和使用工具辅助剪裁的方法,并提供了一个实践示例,最后讨论了剪裁的好处与挑战。
268 15
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
403 1
|
SQL 关系型数据库 MySQL
(二十五)MySQL主从实践篇:超详细版读写分离、双主热备架构搭建教学
在上篇《主从原理篇》中,基本上把主从复制原理、主从架构模式、数据同步方式、复制技术优化.....等各类细枝末节讲清楚了,本章则准备真正对聊到的几种主从模式落地实践,但实践的内容通常比较枯燥乏味,因为就是调整各种配置、设置各种参数等步骤。
1454 4
Element UI 按需引入(含CollapseTransition)
Element UI 按需引入(含CollapseTransition)
280 1