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.设计模式

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

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

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

相关推荐
隔壁小邓2 小时前
Spring-全面讲解
java·后端·spring
读研的武3 小时前
Golang学习笔记 入门篇
笔记·学习·golang
啊阿狸不会拉杆3 小时前
《计算机视觉:模型、学习和推理》第 18 章-身份与方式模型
人工智能·python·学习·计算机视觉·分类·子空间身份模型·plda
JustMove0n3 小时前
互联网大厂Java面试全流程问答及技术详解
java·jvm·redis·mybatis·dubbo·springboot·多线程
adore.9683 小时前
3.11 复试学习
学习
SimonKing3 小时前
5分钟学会!把代码从本地推送到 GitHub,就是这么简单
java·后端·程序员
玹外之音3 小时前
Spring AI 11 种文档切割策略全解析
java·spring·ai编程
自传丶3 小时前
【学习笔记】大模型应用开发系列(二)Embedding 模型
笔记·学习·embedding
Java练习两年半3 小时前
互联网大厂 Java 求职面试:技术栈与微服务深度解析
java·微服务·面试·技术栈
Seven973 小时前
类字节码:揭开Java虚拟机运行机制的神秘面纱
java