当前位置: 首页 > news >正文

Java学习Day17:基础篇7

继承

Java中的继承是面向对象编程中的一个核心概念,它允许我们定义一个类(称为子类或派生类)来继承另一个类(称为父类或基类)的属性和方法。继承提高了代码的复用性,使得我们不必从头开始编写所有的代码,而是可以基于现有的类来构建新的类。

继承的特点

  1. 层次性:继承是单向的,即子类只能继承一个父类(Java不支持多继承,但可以通过实现多个接口来达到类似多继承的效果)。

  2. 传递性:如果类C继承自类B,类B继承自类A,那么类C间接地继承了类A的属性和方法。

  3. 方法重写(Override):子类可以重写父类中的方法,以提供特定的实现。这允许子类根据需要修改父类的行为。

  4. 构造器不继承:子类不能继承父类的构造器(构造方法)。但是,子类构造器可以通过super关键字调用父类的构造器。

  5. 访问控制:子类可以访问父类中声明为publicprotected的属性和方法,但通常不能访问private的属性和方法(尽管可以通过父类的publicprotected方法间接访问)。

示例1:

假设我们有一个Animal类作为父类,它有一个eat()方法。我们还想创建一个Dog类作为Animal的子类,并希望Dog类有自己的bark()方法,同时重写eat()方法以提供特定的实现。

// 父类
class Animal {
public void eat() {
System.out.println("This animal eats food.");
}
}
// 子类
class Dog extends Animal {
// 特有的方法
public void bark() {
System.out.println("Dog barks.");
}
// 重写父类的方法
@Override
public void eat() {
System.out.println("Dog eats dog food.");
}
}
public class TestInheritance {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.eat(); // 输出: Dog eats dog food.
myDog.bark(); // 输出: Dog barks.
}
}

在这个例子中,Dog类通过extends关键字继承了Animal类。Dog类重写了eat()方法,提供了特定于狗的吃法,并添加了一个新的bark()方法。通过Dog类的实例myDog,我们可以调用eat()bark()方法,分别展示了继承和方法重写的特点。

示例2:

public class C extends B {public C() {//1.new时调用C的空参构造函数this(12);//2.调用C的有参构造System.out.println("我是C类的空参构造");}public C(int c) {super(12);//3.调用B的有参构造System.out.println("我是C类的有参构造");}
}
public class B extends A {public B() {super();//5.调用A的空参构造System.out.println("我是B类的空参构造");}public B(int b) {this();//4.调用B的空参构造System.out.println("我是B类的有参构造");}
}
public class A {public A() {this(12);//6.调用A的有参构造System.out.println("我是A类的空参构造");}public A(int a) {//7.输出A的有参构造System.out.println("我是A类的有参构造");}
}

继承的应用场景

继承是面向对象编程(OOP)中的一个核心概念,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。继承的应用场景非常广泛,主要包括以下几个方面:

1. 创建子类

  • 目的:通过继承一个父类,可以快速创建一个新的子类,子类会继承父类的所有非私有成员(属性和方法)。
  • 优势这种方式减少了重复代码,提高了开发效率

2. 实现代码复用

  • 场景:当多个类之间存在相同的属性和行为时,可以将这些共同的内容提取出来,放入一个新的类中,作为父类。其他类则通过继承这个父类来复用这些属性和方法。
  • 优点减少了代码量,提高了代码的可维护性和可读性。

3. 实现多态

  • 概念:多态是指允许不同类的对象对同一消息作出响应。在Java等面向对象的编程语言中,多态通常通过方法的重写和向上转型(将子类对象赋值给父类类型的变量)来实现。
  • 应用场景在需要根据对象的实际类型来调用不同方法时,多态非常有用。例如,在一个动物类中定义了“叫”的方法,猫类和狗类通过继承动物类并重写“叫”的方法,可以分别实现不同的叫声。

4. 实现接口

  • 概念:虽然这不是严格意义上的继承(因为接口不包含方法的实现),但实现接口可以被视为一种特殊的继承方式。通过实现一个接口,类必须实现接口中定义的所有方法。
  • 应用场景:在需要强制类遵循一定规范时,可以使用接口。例如,定义一个可比较接口(Comparable),任何实现了这个接口的类都必须实现比较逻辑。

5. 实现框架

  • 概念:框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程。通过继承一个框架类,可以快速构建一个应用程序的框架。
  • 应用场景:在开发大型应用时,通常会使用框架来加速开发过程。框架类提供了许多基础功能(如用户界面、数据访问和错误处理等),子类则通过继承这些功能并添加特定业务逻辑来完成应用的开发。

6. 简化代码结构

  • 目的:通过继承,可以将具有相似功能的类组织在一起,形成一个清晰的继承体系。
  • 优势:这样做有助于简化代码结构,使得代码更加易于理解和维护。

7.不支持多继承但是支持多层继承

注意事项

  • 在使用继承时,需要确保类与类之间存在合理的“is-a”关系(即子类是父类的一种)。盲目使用继承可能会导致代码结构混乱、难以维护。
  • 继承也有其缺点,如打破了封装性(父类向子类暴露了实现细节)和高耦合性(类与类之间紧密结合在一起,相互依赖性高)。因此,在使用继承时需要权衡其利弊。

综上所述,继承是面向对象编程中一个非常有用的工具,它可以帮助我们快速构建复杂的应用程序,并实现代码复用、多态等高级特性。然而,正确使用继承也需要一定的经验和技巧。

相关文章:

Java学习Day17:基础篇7

继承 Java中的继承是面向对象编程中的一个核心概念,它允许我们定义一个类(称为子类或派生类)来继承另一个类(称为父类或基类)的属性和方法。继承提高了代码的复用性,使得我们不必从头开始编写所有的代码&a…...

Vue3 Pinia的创建与使用代替Vuex 全局数据共享 同步异步

介绍 提供跨组件和页面的共享状态能力,作为Vuex的替代品,专为Vue3设计的状态管理库。 Vuex:在Vuex中,更改状态必须通过Mutation或Action完成,手动触发更新。Pinia:Pinia的状态是响应式的,当状…...

手撕数据结构02--二分搜索(附源码)

一、理论基础 二分搜索,也称折半搜索、对数搜索,是一种在有序数组中查找某一特定元素的搜索算法。 二分搜索是一种高效的查找算法,适用于在已排序的数组中查找特定元素。它的基本思想是通过不断将搜索区间对半分割,从而快速缩小…...

单片机工程师继续从事硬件设计还是涉足 Linux 开发?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「linux的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!! 怎么说呢,感觉绝…...

《昇思25天学习打卡营第25天|第28天》

今天是打卡的第二十八天,实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer(ViT)简介开始了解,模型结构,模型特点,实验的环境准备和数据读取,模型解析&#xff08…...

Flutter Dio网络请求报错FormatException: Unexpected character

最近开发Flutter项目,网络请求采用的是Dio框架,在发起网络请求的时候报错: 网络请求返回的数据为: var returnCitySN {"cip": "127.0.0.1", "cid": "00", "cname": "未…...

关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)

注:另一种方式参考 关于TableField中TypeHandler属性,自定义的类型处理器的使用(密码加密与解密举例)http://t.csdnimg.cn/NZy4G 1.简介 1.1 序列化与反序列化 学习注解之前,我们可以先了解一下什么是序列化与反序列…...

第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营 <二>

第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营-CSDN博客 这里在上一篇的基础上,已经充分理解了一遍baseline的流程,并修复了一些后处理的问题,包括答案抽取,中间…...

C# 关于Linq延迟查询

demo: int Count 0;string[] obj { "item1", "item2", "item3", "item4", "item5", "item6" };var query obj.Where(item > IsTrue(item));// 第一次遍历foreach (var item in query){Console.WriteLine(it…...

Navicat For Mysql连接Mysql8.0报错:客户端不支持服务器请求的身份验证协议

windows通过navicat连接本地mysql时报错:Client does not support authentication protocol requested by server; consider upgrading MySQL client 一、问题原因二、解决方法1--失败1. 连接mysql客户端2. 修改加密方式3.正确的解决方法1.查找my.ini文件2.修改my.ini文件3.重…...

以西门子winCC为代表的组态界面,还是有很大提升空间的。

组态界面向来都是功能为主,美观和体验性为辅的,这也导致了国内的一些跟随者如法炮制,而且很多操作的工程师也是认可这重模式,不过现在一些新的组态软件可是支持精美的定制化界面,还有3D交互效果,这就是确实…...

HomeServer平台选择,介绍常用功能

​​ 平台选择 HomeServer 的性能要求不高,以下是我的硬件参数,可供参考: ‍ 硬件: 平台:旧笔记本CPU:i5 4210u内存 8G硬盘:128G 固态做系统盘,1T1T 机械盘组 RAID1 做存储。硬…...

记录一个k8s集群zookeeper部署过程

由于网管中心交维要求必须是支持高可用配置,原先单节点的zookeeper不被允许。所以在k8s集群中做了一个高可用版本的zookeeper。 期间有点小波折,官方给的镜像版本太老,业务不支持,所以手动做了下处理,重新打了一个镜像…...

TapData 信创数据源 | 国产信创数据库 TiDB 数据迁移指南,加速国产化进程,推进自主创新建设

随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国产数据库正在成为主流。长期以来,作为拥有纯国产自研背景的 TapData,自是非常重视对于更多国产信创数据库的数据连接器支持&…...

开始写人工智能

文章目录 概述 概述 开始写人工智能模块。既然决定开始写这些,那就开始吧!...

盘点.软件测试模型

软件开发模型   软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发包括需求、设计、编码和测试等阶段,有时也包括维护阶段。 软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动…...

燃气安全无小事,一双专业劳保鞋让你步步安心!

燃气作为我们日常生活中不可或缺的能源之一,为我们的生活提供了极大便利,其安全性往往被忽视在忙碌的日常生活背后。然而,燃气事故一旦发生,后果往往不堪设想,轻则财产损失,重则危及生命。因此,…...

springboot校园服装租赁系统-计算机毕业设计源码30824

目 录 摘要 1 绪论 1.1 研究背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 校园服装租赁系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例…...

线性回归和逻辑回归揭示数据的隐藏模式:理论与实践全解析

机器学习之线性回归和逻辑回归 1. 简介1.1 机器学习概述1.2 监督学习的定义与重要性1.3 线性回归和逻辑回归在监督学习中的作用1.3.1 线性回归1.3.2 逻辑回归 2. 线性回归(Linear Regression)2.1 定义与目标2.1.1 回归问题的定义2.1.2 预测连续目标变量 …...

掌握采购询价软件:高效比较供应商报价的技巧

在企业运营中,获取所需的产品往往是一项复杂且耗时的任务,这涉及多个环节和流程。然而,借助电子采购询价(RFQ)系统,许多原本需要采购员手动完成的任务可以自动化运行,从而提高了效率。 那么问题…...

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...