Java中不同变量声明类型

news2024/12/23 6:28:34

今天在学习分层解耦-三层架构的过程中,具体文章参照:写文章-CSDN创作中心

在Servie层创建Dao对象时,以及在Controller层创建Service对象时,发现与我之前了解的声明变量的方法不一样。具体关键代码如下:

 

 其中EmpService和EmpDao都是接口类,EmpServiceA和EmpDaoA都是接口实现类

后来查询发现这是使用接口类型声明变量,而以前我仅仅了解使用具体实体类型声明变量、以及上转型对象

在查询后发现Java中发现声明对象的类型有以下5中

  1. 使用接口类型声明对象(面向接口进行编程)
  2. 使用具体实体类声明(面向对象进行编程)
  3. 使用父类类型声明对象(上转型对象)
  4. 使用匿名类声明对象
  5. 使用数组声明对象
  6. 使用泛型声明对象

目前在学习过程中,只遇到1、2两种,就先解析这两种

假设我们有一个简单的接口 Shape,其中定义了一个计算面积的方法 calculateArea():

public interface Shape {
    double calculateArea();
}

现在我们有两个实现类 Circle 和 Rectangle,分别实现了 Shape 接口:

public class Circle implements Shape {
    private double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

public class Rectangle implements Shape {
    private double length;
    private double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    @Override
    public double calculateArea() {
        return length * width;
    }
}

现在我们来看一下使用不同变量声明类型的例子:

使用接口类型声明变量:

Shape shape1 = new Circle(5.0);
System.out.println(shape1.calculateArea()); // 输出:78.53981633974483

Shape shape2 = new Rectangle(4.0, 6.0);
System.out.println(shape2.calculateArea()); // 输出:24.0

通过使用接口类型 Shape 声明变量,我们可以根据需要灵活地选择具体的实现类来创建对象。这样,我们可以统一对待不同类型的形状,只关注它们共同拥有的方法。

使用具体实现类类型声明变量:

Circle circle = new Circle(5.0);
System.out.println(circle.calculateArea()); // 输出:78.53981633974483

Rectangle rectangle = new Rectangle(4.0, 6.0);
System.out.println(rectangle.calculateArea()); // 输出:24.0

通过使用具体实现类类型声明变量,我们限定了变量只能引用相应的具体类型对象。这样会导致在代码中对具体类型进行硬编码,而不是针对接口进行编程。

总结:

使用接口类型声明变量可以实现多态性(实现不同类中的方法),提高代码的灵活性和可替换性。
使用具体实现类类型声明变量则限制了变量类型(只能是该类型的变量),增加了耦合性并降低了代码的扩展性。

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

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

相关文章

简要介绍 | 边缘计算:原理,研究现状与未来展望

注1:本文系“简要介绍”系列之一,仅从概念上对边缘计算进行非常简要的介绍,不适合用于深入和详细的了解。 边缘计算:原理,研究现状与未来展望 What is Edge Computing? | Moving Intelligence to the Edge 一、背景介…

小平板 大智慧-嵌入式方案满足教育市场多元需求

线上教育观念的深入和技术的更新,直接拉动了教育类硬件及相关终端设备的市场需求。 产品框图 IDO-SBC3566采用瑞芯微RK3566, CPU采用4核A55架构处理器,集成G52图形处理器,内置独立NPU,算力高达1Tops,可满足…

如何在 Windows 中免费合并 PDF 文件 [在线和离线]

PDF是一种广泛使用的文件格式,具有兼容性好、安全性高、易于打印、方便浏览等众多优点。在工作和学习过程中,经常需要将同一类型的PDF文件合并起来,以方便传输和查看,使得合并PDF文件成为一种重要的数据整合方法。 如果您想知道如…

Es存储和查询

基本概念 Cluster 集群,一个ES集群是由多个节点(Node)组成的,每个集群都有一个cluster name 作为标识, 在同一网段下的Es实例会通过cluster name 决定加入哪个集群下。 node 节点,一个ES实例就是一个node,一个机器可以…

电气控制与PLC之间的本质区别是什么?

电气控制和PLC(可编程逻辑控制器)之间的最实质的区别是它们的实现方式和应用范围。 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 实现方式: 电气控制:电气控制是通过使用电气元件(如继电器、…

数据库多表连接查询练习

数据库多表连接查询练习 一、创建数据库dept、emp 二、插入数据 1.找出销售部门中年纪最大的员工的姓名 mysql> select name,age from emp inner join dept on dept.dept1emp.dept2 where dept_name销售 order by age desc limit 1;2.求财务部门最低工资的员工姓名…

探索AI大模型:现状、挑战与未来

导言: 近年来,AI大模型如GPT(生成对抗网络)在自然语言处理领域崭露头角,引发广泛关注和讨论。这些模型能够生成各种类型的文本内容,展现出惊人的语言处理能力。然而,AI大模型的发展也面临着挑战…

Perl web - Mojolicious 小记

文章目录 关于 Mojolicious安装 关于 Mojolicious Mojolicious是Perl语言比较流行的异步Web开发框架。 官网:https://mojolicious.orggithub : https://github.com/mojolicious/mojo示例:https://github.com/mojolicious/mojo/tree/main/examples 相关…

【雕爷学编程】Arduino动手做(138)---64位WS2812点阵屏模块8

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

移动端 滚动穿透

文章目录 滚动穿透弹窗内容滚动到底部后带动底层页面滚动在弹窗出现时可以直接通过页面滚动条滚动 禁用底层页面滚动弹出层将覆盖整个视口禁用触摸事件监听弹出层滚动位置阻止弹出层的滚动事件冒泡 滚动穿透 当一个固定定位(fixed)或绝对定位&#xff0…

Windows10 网页版 上线!最具扩展性的webos

模仿Windows10 UI 框架 Vue3 点击进入github 链接: https://github.com/royalknight56/win10-vue3 本框架可以让你的页面像win10视窗系统一样,运行一个网页上的win10系统。 本框架可能是最具扩展性的webos 本框架相较于其他的特点是, 具有文件系统&am…

第二章:类与对象(上)

系列文章目录 文章目录 系列文章目录前言面向过程和面向对象初步认识类的引入类的定义类的两种定义方式成员变量命名规则的建议 类的访问限定符及封装访问限定符面试题 封装面试题 类的作用域类的实例化类对象模型如何计算类对象的大小类对象的存储方式猜测对象中包含类的各个成…

C语言字节序

C语言字节序分为大端序和小端序。 大端序: 高字节先存储,也就是数据的高字节存储在低地址中。 小端序: 低字节先存储,也就是数据的低字节存储在低地址中。 例如: short a 01234; char *p &a; printf(&qu…

基于Java+SpringBoot制作一个社区宠物登记小程序

制作一个社区宠物登记小程序,帮助社区居民登记和管理他们的宠物信息,以便更好地跟踪和维护社区中的宠物状况,通过社区宠物信息登记系统,社区居民可以更好地管理自己的宠物信息,并与其他宠物所有者共享资源和信息。这将有助于提高社区宠物的福利和安全,促进社区成员之间的…

业务流程管理系统是什么?企业业务流程有哪些?

随着企业规模的不断扩大和竞争的日益激烈,业务流程管理系统的重要性也越来越明显。通过对业务流程的全面管理和优化,企业可以提高工作效率、降低流程成本、优化流程质量,从而在市场竞争中获得更大的优势。 阅读本文您将了解: 一、…

【实战项目】c++实现基于reactor的高并发服务器

基于Reactor的高并发服务器,分为反应堆模型,多线程,I/O模型,服务器,Http请求和响应五部分 全局 反应堆模型 Channel 描述了文件描述符以及读写事件,以及对应的读写销毁回调函数,对应存储arg读…

查看某个三方依赖jar包是在哪个pom引入的(springboot+idea)

项目springboot1升级2版本,日志框架使用的是log4j,升级到springboot2版本某些依赖引入了logback依赖包,然后项目启动报错: 查看这个SLF4JLoggerContextFactory这个类是在哪个jar包下 使用idea的maven依赖图查看功能寻找是哪个p…

代码随想录打卡

这里写目录标题 1.数组部分1.1二分查找1.2移除元素1.3 有序数组的平方1.4长度最小的子数组1.5螺旋矩阵II 2. 链表部分2.1移除链表元素2.2设计链表2.3反转链表2.4两两交换相邻的节点2.5删除链表的倒数第n个节点 1.数组部分 1.1二分查找 class Solution {public int search(int[…

能耗感知虚拟光网络映射论文分析

1、M. Zhu, P. Gao, J. Zhang, X. Zeng, and S. Zhang, “Energy efficient dynamic virtual optical network embedding in sliceable-transponder-equipped eons,” in GLOBECOM 2017 - 2017 IEEE Global Communications Conference, 2017, pp. 1–6. 特点是:1&a…

干货 | 儿童智能手表数据安全要求标准设计

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。 一、选题与背景 儿童智能手表暴露的数据安全事件比较显著,我们主要针对这一个特殊的细分领域做研究。 二、研究报告 三、标准草案介绍 我们通过分析儿童智能手表的业务组成&#xff…