Java基础20问(1-5)

1.Java面向对象和面试过程的区别?

面向过程是将一个问题拆解成几个步骤,依次实现每一个步骤,比如实现一个冒泡排序的算法,是为了解决某个非常具体的问题。

面向对象也是将一个问题拆解成几个步骤,但是先不去实现,而是根据这些步骤抽象出若干个类,每个类都有属性和方法,咱配合着把问题解决。比如把大象装进冰箱,得有一个冰箱类和大象类,还有一个执行者类。执行者类拥有一个放入的方法,传入两个参数:大象冰箱

2.面向对象的三大特性怎么理解?

1.封装

把客观的事物抽象成一个类就是封装,实际开发中,这个事物往往是一个业务对象,比如贷款,公积金,房产等。

2.继承

编程界的继承就是子类继承父类,从而可以复用父类的属性和方法,目的就是少写代码。

3.多态

子类继承父类后,虽然继承了父类的属性和方法,但是业务上往往需要子类拥有不同的行为,所以在一个继承链中同一个方法很有可能出现不同实现(方法重写/重载),这就是多态的一个体现。

多态还体现在方法传参的时候,比如一个eat方法,参数列表是Food类型,那么所有继承自Food类的实例都可以传进去。目的是提高程序的灵活性。

3.继承和实现有什么区别?

一个类用 extends 关键字继承父类,用 implements 关键字实现接口,不管是继承还是实现,这个类都可以视为父类/接口类的子类。

继承和实现都是为了实现多态,Java支持多实现,单继承。

4.为什么Java不支持多继承

需要多继承的场景很少,而且多继承会带来菱形问题,C++为了解决菱形问题引入了虚继承,过于复杂,没必要。

PS:所谓菱形问题就是B类和C类都继承了A类,D类同时继承B类和C类,那么A类中的方法会在D类里面获取两次,这时D类如果调用A类的方法,会有歧义。

5. 面向对象的无法基本原则?

单一职责原则 (SRP):

这个原则指的是一个类最好只做一件事。这有助于降低类的复杂性,提高代码的可读性和可维护性。例如,一个汽车类可以有一个方法叫做move(),而这个方法里面包含了所有关于移动汽车的行为,加速、减速、转弯等等。这就不符合单一职责原则,因为move()方法做了太多的事情。更好的做法是将加速、减速、转弯等行为放在各自的方法中,使得每个方法都只做一件事情。

开放封闭原则 (OCP):

这个原则是指对扩展开放,对修改封闭。也就是说,在设计一个系统的时候,应该使得它可以通过添加新的代码来进行扩展,而不是通过修改已有的代码。例如,如果我们有一个处理VIP用户的类,我们可以为这个类添加一个新的方法来处理新类型的VIP用户,而不是修改已有的方法来处理新的VIP用户。

里氏替换原则 (LSP):

这个原则是指子类必须能够替换其父类。也就是说,如果一个类B继承自一个类A,那么在使用A的地方应该可以使用B。这个原则可以帮助我们确保继承的正确使用,避免向下替换的问题。

简单来说,就是任何你用到父类的地方,就算换成子类,程序也不会报错。

所有子类的行为功能必须和使用者对其父类的期望保持一致,如果子类达不到这一点,那么必然违反里氏替换原则。

如果违反了,我们就要反思,是不是我们的继承用错了。比如鸟类实现了飞翔的接口,鸵鸟能继承鸟类嘛?显然不行,因为鸟类希望所有的继承者都会飞,而鸵鸟显然不能飞,强行继承的话,在鸟飞调用fly方法的时候,鸵鸟就报错了。

依赖倒置原则 (DIP):

这个原则是指程序要依赖于抽象接口,而不是具体的实现。也就是说,我们在编程的时候应该依赖于接口或者抽象类,而不是具体的实现类。

简单来说就是定义对象的时候,用接口或者抽象类,而不是一个具体的实现类。

这样可以使得我们的代码更加灵活,可以方便地更换实现。例如,我们有一个接口叫做Printer,有很多实现这个接口的类(如PrinterA, PrinterB等等)。在我们的代码中,我们不应该直接使用PrinterAPrinterB,而应该使用Printer接口。这样如果以后我们想更换成其他的打印机,只需要添加一个新的实现类就可以了。

接口隔离原则 (ISP):

这个原则是指使用多个小的专门的接口,而不要使用一个大的总接口。

简单来说就是接口方法尽量少,避免一个类因为实现了接口,要去实现一大堆自己用不到的方法。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scratch身高统计 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch身高统计 一、题目要求 1、准备工作 2、功能实现 二、案例分析

二维码智慧门牌管理系统:构建未来社区管理新典范

文章目录 前言一、系统概述二、系统优势三、多领域应用四、未来展望 前言 在科技的迅猛发展下,我们的生活正朝着智能化迈进。最近,备受瞩目的“二维码智慧门牌管理系统”为社区管理带来了一场革命,通过建立标准要素之间的关系,重…

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1:发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一:配置式:问题: 3、MessageService 编写逻辑PublishController 控制器application.properties 配…

同为科技(TOWE)关于风力发电雷电防护的解决方案

风能作为一种可再生清洁能源,是国家新能源发展战略的重要组成部分。我国风能开发潜力高达2.510GW以上,近年来风力发电机组逐年增加,截止到2022年,全国风电装机容量约3.5亿千瓦,同比增长16.6%。然而,由于风力…

FPGA project : flash_continue_write

本实验学习了通过spi通信协议,驱动flash;完成连续写操作。 连续写: 本质上还是页编程指令,两种连续写的方式: 1,每次只写1byte的数据。 2,每次写满1页数据,计算剩余数据够不够写…

RabbitMQ的5种模式——再探RabbitMQ的模式,简单、工作,发布订阅(广播),路由、主题 页面分析

前言 RabbitMQ作为一款常用的消息中间件,在微服务项目中得到大量应用,其本身是微服务中的重点和难点,有不少概念我自己的也是一知半解,本系列博客尝试结合实际应用场景阐述RabbitMQ的应用,分析其为什么使用&#xff0…

手机市场或迎复苏,芯片测试与封测供应链积极应对 | 百能云芯

低迷不振的手机供应链,终于迎来曙光?半导体封测供应链传出从10月开始,手机系统大厂终于开始有明显的库存回补动作,锁定如联发科等一线手机SoC从业者的「旧款芯片」备货。 测试厂如京元电、测试界面的雍智等接获备战指示&#xff0…

深圳寄包裹到德国

深圳,作为全球最发达的城市之一,以其高效的物流服务在全球范围内享有盛名。如果你正在寻找一种方式将包裹从深圳寄送到德国,那么本文将为你提供详细的步骤和建议。 第一步:了解国际邮寄的基本信息 首先,你需要了解包裹…

C++基本语法【恩培学习笔记(一)】

文章目录 1、C程序结构1.1 C程序的基本组成部分1.2 预处理指令1.3 注释1.4 main() 主函数1.5 命名空间 namespace 2、 C的变量和常量2.1 变量2.2 变量的声明2.3 变量的类型 3、C 数组和容器3.1 数组(array)3.2 容器(vector) 4、C …

多模态大模型升级:LLaVA→LLaVA-1.5,MiniGPT4→MiniGPT5

Overview LLaVA-1.5总览摘要1.引言2.背景3.LLaVA的改进4.讨论附录 LLaVA-1.5 总览 题目: Improved Baselines with Visual Instruction Tuning 机构:威斯康星大学麦迪逊分校,微软 论文: https://arxiv.org/pdf/2310.03744.pdf 代码: https://llava-vl.…

10.2手动推导linux中file, cdev, inode之间的关系

是时候可以手动推导一下linux里面基类父类和子类的关系了 代码放最后把 简单说明版 详细流程 第一步注册驱动 cdev结构体能看做是一个基类,那么链表里面都是字符设备驱动的cdev连载一起,啥串口,lcd的,通过cdev->list_head连接 那cdev结构体里有主次设备号 第一步 使用r…

探索未来:硬件架构之路

文章目录 🌟 硬件架构🍊 基本概念🍊 设计原则🍊 应用场景🍊 结论 📕我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

矿区井下智慧用电安全监测解决方案

一、背景 矿区井下作业具有复杂的环境和较高的危险性,对于用电安全的要求尤为严格。传统的管理模式和监测方法往往无法实时、准确地掌握井下用电情况,对安全隐患的排查与预防存在一定局限性。因此,引入智慧用电安全监测解决方案&#xff…

【LeetCode刷题(数组and排序)】:存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 示例 1: 输入:nums [1,2,3,1] 输出:true 示例 2: 输入:nums [1,2…

【ARM Coresight 系列文章 9.1 -- ITM 仪器化跟踪宏单元详细介绍】

文章目录 1.1 ITM 介绍1.1.1 ITM 功能介绍1.1.2 Cortex-M ITM 的地址范围1.2 ITM 使用1.2.1 ITM 寄存器介绍1.2.2 Cortex-M7 ITM 代码示例1.2.3 Cortex-M33 ITM 代码示例1.1 ITM 介绍 在debug 调试阶段通常都是使用 printf(printk) 来进行进行 log 输出,然后定位问题。那么如…

TikTok国际版 使用特网科技Bluestacks模拟器安装方法

特网科技Bluestacks模拟器主机 桌面自带Bluestacks模拟器 TikTok国际版Bluestacks模拟器搜索tiktot 登录google应用商店-安装TikTok 安装过程可能需要3-5分钟不等-配置过低可能会导致安装失败,建议升级更高内存。 安装完成-打开 安装成功APP-我的游戏查看 打开国际版…

普通螺纹基本牙型尺寸及拧紧力矩.exe

一、概要 本软件功能主要是通过输入螺纹原始三角形高度P,螺栓规格(公称直径)d,材料的屈服应力σs,计算出公称应力截面积As、外螺纹小径d1、外螺纹小径d2、拧紧力矩T等参数。 开发本软件的原因主要有以下几点: 提高设计效率:通过这款软件,工程师可以快速计算螺纹的基本牙…

【Java学习之道】网络编程的基本概念

引言 这一章我们将一同进入网络编程的世界。在开始学习网络编程之前,我们需要先了解一些基本概念。那么,我们就从“什么是网络编程”这个问题开始吧。 一、网络编程的基本概念 1.1 什么是网络编程 网络编程,顾名思义,就是利用…

05_51单片机led流水线的实现

1:step创建一个新的项目并将程序烧录进入51单片机 以下是51单片机流水线代码的具体实现 #include <REGX52.H>void Delay500ms() //11.0592MHz {unsigned char i, j, k;i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); }void main(){while(1){P1 0…

智慧水利:山海鲸数字孪生的革新之路

一、概念 什么是港口&#xff1f; "港口"通常指的是一个水域或岸边的设施&#xff0c;用于装载、卸载、储存和处理货物、以及提供与海上、河流或湖泊交通相关的服务。港口可以包括各种类型的码头、码头设备、仓库、货物运输设施、以及各种管理和物流设施。 什么是数…