Java|学习|类之间的关系,内部类,设计模式

1.类之间的一些关系

依赖关系:一个类的局部变量是另一个类的对象的引用。

关联关系:一个类的成员变量或静态变量是另一个类的对象的引用。

聚合关系:聚合是关联关系的一种,体现整体与部分的关系,即关系。整体和部分是可以分离的,有着各自的生命周期。代码层面和关联关系一致。比如一个类要调用另一个类的对象,另一个类的对象在该类之外创建,那么它们有关联关系但是有各自的生命周期,另一个类的对象不会因为该类的对象销毁而销毁。

组合关系:组合是关联关系的一种,体现整体与部分的关系,但是这个整体和部分是不可以分开的,整体的生命周期结束也就意味着部分的生命周期结束。代码层面和关联关系一致。在类中创建另一个类的对象,那么当这个类的对象销毁时,另一个类的对象也会销毁,这就是组合关系。

2.内部类

2.1 概述

在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。

2.2 使用

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部包含他的事物提供服务,那么整个内部的完整结构最好使用内部类。

在外部类之外引用内部类的话,需要提供内部类完整的名称: 外部类类名$内部类类名

内部类是可以使用权限控制修饰符的。

内部类可以访问外部类中的私有化属性。

2.3 成员内部类

成员内部类,等同于成员变量,没有 static 修饰。

成员内部类中不能有静态声明。这是因为成员内部类等同于外部类的成员变量,在对象的层面上运行,也就是实例化对象以后才会执行成员内部类,而写了静态声明后,静态属性需要在类加载的时候就执行,发生冲突。

成员内部类中可以直接访问外部类的所有数据。

2.4 静态内部类

静态内部类,可以等同看作静态变量。

静态内部类中,可以声明任何数据。这是因为静态内部类等同于静态变量,在类的层面上运行,也就是类加载的时候就会执行,因此不论声明任何数据都可以执行。声明静态属性的话也不会冲突。

静态内部类中无法直接访问外部类的成员属性,需要创建对象才可以访问。因为外部类的成员属性在外部类实例化的时候才会执行,但是静态内部类在外部类加载的时候就执行了,此时无法找到外部类的成员属性。所以需要创建外部类的对象,才可以访问到外部类的成员属性。

2.5 局部内部类

局部内部类,可以看作局部变量。

成员方法中的局部内部类,可以直接访问外部类的成员属性。

静态方法中的局部内部类,不能直接访问外部类的成员属性。

局部内部类,不可以有静态声明。

如果通过局部内部类访问外部方法中的局部变量,该变量需要加 final 修饰。从 JDK1.8 开始, final 可以省略不写,但是该变量还是默认被 final 修饰。

局部内部类前,不可以使用权限修饰符,也不可以使用 static 。

局部内部类的类名为 外部类类名$1内部类类名 。如果内部类类名重复了,类名为 外部类类名$2内部类类名 ,以此类推。

由于局部内部类在某个方法中,所以该内部类只能在这个方法中使用。

2.6 匿名内部类

当一个方法的参数需要传入一个类对象时,均可以使用匿名内部类。一般情况下,是需要传入接口的实现类对象。

此匿名内部类,就等于该类(接口)的子类,不需要定义 class 。

匿名内部类的类名: 外部类类名$1 ,如果有多个匿名内部类, 类名后缀的数字依次递增。

创建匿名内部类传入,此时该类不能复用。

匿名内部类,就相当于创建了一个类(接口)的子类,并创建这个子类的对象传入。

匿名内部类中是不能定义构造函数的。匿名内部类没有类名,而构造方法名需要和类名相同。

匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。

匿名内部类中不能存在任何的静态成员变量和静态方法。

匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

3.设计模式

设计模式是代码设计经验的总结,一般代表了最佳实践。

如果对您有帮助,请点赞关注支持我,谢谢!❤

如有错误或者不足之处,敬请指正!❤

相关推荐
user_admin_god13 分钟前
企业级管理系统的站内信怎么轻量级优雅实现
java·大数据·数据库·spring boot
q***829113 分钟前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback
Kuo-Teng21 分钟前
LeetCode 206: Reverse Linked List
java·算法·leetcode·职场和发展
yaoxin52112322 分钟前
237. Java 集合 - 对 List 元素进行排序
java·windows
yaoxin52112327 分钟前
236. Java 集合 - 使用索引访问 List 元素
java·windows·list
GLAB-Mary32 分钟前
HCIE最优规划路线:如何系统性学习华为认证?
学习·华为·华为认证·hcie·数通
月下倩影时37 分钟前
视觉学习——卷积与神经网络:从原理到应用(量大管饱)
人工智能·神经网络·学习
d111111111d1 小时前
STM32外设学习-串口数据包笔记-(程序)
笔记·stm32·单片机·嵌入式硬件·学习
humors2211 小时前
服务端开发案例(不定期更新)
java·数据库·后端·mysql·mybatis·excel
百***68041 小时前
JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
java·tomcat