穿越Java世界的继承奇旅:从基类到子类的华丽蜕变

在这里插入图片描述

1.为什么要继承

2.什么是继承以及继承的方式

3.继承的一些语法

4.父类成员的访问
5.关键字super
6.关键字protected
7.关键字final
8.继承与组合

一:为什么要继承

①代码重用:继承允许我们重用、扩展或修改父类的属性和方法,而无需重新编写相同的代码。这有助于减少代码冗余,提高代码的可维护性和可扩展性。
②实现多态:多态是面向对象编程的三大特性之一(封装、继承、多态)。通过继承,我们可以定义具有共同接口(即方法)的多个类,这些类可以执行不同的操作。这增加了程序的灵活性和复用性。
③实现框架和库:在开发大型应用程序时,通常会使用框架和库来提供基础功能。这些框架和库通过继承机制,允许开发者定义自己的类来扩展或定制现有功能。
④表达类之间的“是一种”关系:继承可以用来表达类之间的“是一种”(is-a)关系。例如,如果有一个Animal类,我们可以创建一个Dog类继承自Animal类,因为狗是一种动物。这种关系使得类的设计更加直观和易于理解。
⑤提供模板和抽象基类:通过继承,我们可以创建模板类(也称为抽象基类或接口类),这些类只定义接口(即方法签名),而不实现它们。这样,子类就必须实现这些接口,从而强制实现特定的行为。这有助于确保子类遵循一致的编程范式。
⑥促进模块化:继承有助于将程序分解成更小的、可管理的部分(即类)。每个类负责特定的功能,并通过继承与其他类交互。这有助于促进程序的模块化和封装性。

二:什么是继承以及继承的方式

继承是面向对象编程(OOP)中的一个核心概念,它提供了一种机制,允许我们基于已有的类来创建新的类,新创建的类被称为子类(或派生类),而原有的类被称为父类(或基类、超类)。
这里是引用

Dog和Cat都继承了Animal类,其中:Animal类称为父类/基类或超类,Dog和Cat可以称为Animal的
子类/派生类,继承之后,子类可以复用父类中成员,子类在实现时只需关心自己新增加的成员即可。
从继承概念中可以看出继承最大的作用就是:实现代码复用,还有就是来实现多态。
继承又分单继承、多层继承、不同类继承同一个类。

单继承:

在这里插入图片描述

public class A{
·······
}
public class B extends A{
·······
}

多层继承:

在这里插入图片描述

public class A{
·······
}
public class B extends A{
·······
}
public class C extends B{
·······
}

不同类继承同一个类:

在这里插入图片描述

public class A{
·······
}
public class B extends A{
·······
}
public class C extends A{
·······
}

注意不支持如图所示的多继承

public class A{
·······
}
public class B {
·······
}
public class C extends B/A{
·······
}
**//java不支持多继承**

三:继承的一些语法

class 基类名 {  // 基类的成员变量和成员函数  
}  class 派生类名 extends 基类名 {  // 派生类的成员变量和成员函数  
}

四:父类成员的访问
1、子类与父类不存在同名的成员变量

public class w{int a;int b;
}
public class m extends w{int c;
public void method(){a=1;//父类继承下来的b=2;//父类继承下来的c=3;//子类自己的}
} 

2、子类和父类成员变量同名

public class w{int a;int b;
}
public class m extends w{int a;int b;int c;
public void method(){a=1;//父类和子类都有a,则优先访问子类的ab=2;//父类和子类都有b,则优先访问子类的bc=3;//只有子类有,访问子类的}
} 

成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。

3、子类中访问父类的成员方法名字不同

public class w {public void methodA(){System.out.println("w中的methodA()");}
}
public class m extends w{public class methodB(){System.out.println("w中的methodB()");}public class methodC(){methodB(); // 访问子类自己的methodB()methodA(); // 访问父类继承的methodA()// methodD(); // 编译失败,在整个继承体系中没有发现方法methodD()}}

四、子类中访问父类的成员方法名字相同

public class w{public void methodA(){System.out.println("w中的methodA()");}public void methodB(){System.out.println("w中的methodB()");}
}
public class m extends w{public void methodA(int a) {System.out.println("m中的method(int)方法");}public void methodB(){System.out.println("m中的methodB()方法");}public void methodC(){methodA(); // 没有传参,访问父类中的methodA()methodA(100); // 传递int参数,访问子类中的methodA(int)methodB(); // 直接访问,则永远访问到的都是子类中的methodB(),基类的无法访问到}
}

五:关键字super

如果子类中存在与父类中相同的成员时,这是super就起到了作用。

public class w {int a;int b;public void methodA(){System.out.println("w中的methodA()");
}public void methodB(){System.out.println("w中的methodB()");}
}
public class m extends w{int a; // 与父类中成员变量同名且类型相同char b; // 与父类中成员变量同名但类型不同// 与父类中methodA()构成重载public void methodA(int a) {System.out.println("m中的method()方法");
}// 与基类中methodB()构成重写(即原型一致,重写后序详细介绍)public void methodB(){System.out.println("m中的methodB()方法");}public void methodC(){// 对于同名的成员变量,直接访问时,访问的都是子类的a = 100; // 等价于: this.a = 100;b = 101; // 等价于: this.b = 101;// 注意:this是当前对象的引用// 访问父类的成员变量时,需要借助super关键字// super是获取到子类对象中从基类继承下来的部分super.a = 200;super.b = 201;// 父类和子类中构成重载的方法,直接可以通过参数列表区分清访问父类还是子类方法methodA(); // 没有传参,访问父类中的methodA()methodA(20); // 传递int参数,访问子类中的methodA(int)// 如果在子类中要访问重写的基类方法,则需要借助super关键字methodB(); // 直接访问,则永远访问到的都是子类中的methodA(),基类的无法访问到super.methodB(); // 访问基类的methodB()}
}

六:关键字protected
protected用于修饰类的成员(包括成员变量、成员方法和构造方法),它提供了一种比默认访问权限(包访问权限)更严格的访问控制,但又比private访问权限更宽松。
七:关键字final
修饰变量:final修饰的变量一旦初始化后,其值就不能被改变。这通常用于定义常量。
修饰方法:final修饰的方法不能被子类覆盖(重写)。这有助于防止子类意外地改变父类的行为。
修饰类:final修饰的类不能被继承。这通常用于设计那些不需要被扩展的类,如String、Integer等。
final关键字在Java中的好处包括确保数据完整性、提高代码安全性以及增强性能。因为final变量和方法在编译时就可以确定其不变性,所以编译器可以对它们进行优化。
八:继承与组合
例如一辆汽车
在这里插入图片描述
汽车和其轮胎、发动机、方向盘、车载系统等的关系就应该是组合

// 轮胎类
class Tire{
// ...
}
// 发动机类
class Engine{
// ...
}
// 车载系统类
class VehicleSystem{
// ...
}
class Car{
private Tire tire; // 可以复用轮胎中的属性和方法
private Engine engine; // 可以复用发动机中的属性和方法
private VehicleSystem vs; // 可以复用车载系统中的属性和方法
// ...
}
// 奔驰是汽车
class Benz extend Car{
// 将汽车中包含的:轮胎、发送机、车载系统全部继承下来
}

注意:
1.继承是一种“is-a”关系,即派生类是基类的一个特殊化版本。
2.继承不是万能的,过度使用继承会导致代码结构复杂、难以维护。在设计类时,应优先考虑组合(composition)而不是继承(inheritance)。
3.在使用继承时,要注意成员变量的隐藏和方法的重写,以避免出现意外的行为。

在这里插入图片描述

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

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

相关文章

未使用CMSIS之前的stm32标准库中SystemHandler的宏定义

背景: 在stm32的标准库还叫STM32F10xxx_FWLib_V2.0.3的那个年代 文件 STM32F10xFWLib_V2.0.3/FWLib/library/inc/stm32f10x_nvic.h 中有对System Handlers的定义。具体内容如下: /* System Handlers -------------------------------------------------…

【Altium Designer程序开发】生成XML多级数据库文件 V2.0

此工具用于生成多级多节点的XML数据库文件,主要功能用于测试XML文件的生成速度的,运行环境在Altium Designer中,可用于Altium Designer全系列的版本中。 程序界面如下图所示,每一级节点表示每个父Node的子Node的数量,节…

Java面试题:equals和==的区别与联系分别是什么?

1. 运算符 是一个运算符,其用于比较两个变量的内存地址是否相等;对于基本数据类型(int、char、Boolean等),比较的是它们的值;而对于引用数据类型的话(String、Object、ArrayList等),比较的是引用,也就是对…

【函数模板】函数模板的类型推导

一、类型的自动推导 当函数模板的返回值被指定或与传入的参数的类型一致&#xff0c;那么可以直接调用函数模板&#xff0c;而不需要显式的指定参数。 //函数推导 template<typename T, typename R> T Add(T a, R b) {return a b; }void Test1() {//自动推导int x 1;…

Linux下递归设置目标目录及其子目录和文件的权限

〇、背景 本文旨在简单介绍一个在Linux环境下批量修改目录及其子目录和文件的权限的方法。 一、实现 首先新建一个shell脚本文件&#xff0c;使用指令$ vi chmod.sh&#xff0c;然后在文件中输入下述代码。 #!/bin/bashOFFSET_INDEX" " DIR_MODE755 FILE_MODE664…

笔记整理—内核!启动!—uboot部分(1)

常规启动时&#xff0c;各镜像都在SD卡中的各种分区中&#xff0c;内核放在kernel分区&#xff0c;从SD卡到DDR的连接处&#xff08;内核不需要进行重定位&#xff0c;直接从链接处启动&#xff09;。uboot从sd卡分区读使用movi命令。 使用fastboot指令可以查看分区情况&#x…

Datawhale X 李宏毅苹果书 AI夏令营 Task2打卡

线性模型&#xff08;Linear model&#xff09; 通常模型的修改来自于对问题的理解&#xff0c;即领域知识 基本定义&#xff1a;把输入特征x乘上一个权重&#xff0c;再加上一个偏置就可以得到预测的结果。 优点&#xff1a;简单易理解&#xff0c;可理解性好&#xff08;权重…

C++(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例2

C(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例2 文章目录 C(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例21、概述2、实现效果3、主要代码4、源码地址 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;GIS开发 &#x1f448; 1、概述 支持多线程…

AWS-亚马逊网络服务(基础服务)-AWS 定价计算器-概述与动手部署:

让我们来概述并亲身实践如何使用 AWS 定价计算器来计算 概述&#xff1a; AWS 定价计算器是 Amazon Web Services (AWS) 提供的基于 Web 的工具&#xff0c;可帮助用户估算其特定用例的 AWS 服务成本。欢迎来到雲闪世界。 它允许客户建模他们的基础设施并根据他们打算使用的…

大数据智能风控核心:模型

概述 模型 线性判别分析方法&#xff0c;Sir Ronald Fisher最早提出模型评分的概念。 个人FICO模型信用分。 巴塞尔委员会发布巴塞尔Ⅱ协议&#xff0c;推出内部评级法&#xff08;Internal Rating Based Approach&#xff0c;IRB&#xff09;​。IRB综合考虑客户评级和债项…

【STM32】BKP备份寄存器与RTC实时时钟

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 BKP简介 BKP代码注解 读写备份寄存器 复位备份寄存器 BKP代码 RTC简介 RTC代码注解 RTCCLK时钟源选择 分频器配置 时钟同步 RTC代码 MyRTC.h MyRTC.c main.c BKP简介 BKP&…

手把手教你从开发进度划分测试

一.单元测试&#xff08;Unit Testing&#xff09; 单元测试&#xff1a;软件单元测试的对象是可独立编译或汇编的程序模块。测试的对象是软件测试中的最小单位&#xff1a;模块。 测试阶段&#xff1a;编码后或者编码前&#xff08;TDD&#xff1a;测试驱动开发&#xff09;…

【网络基础】探索 NAT 技术:IP 转换、NAPT、NAT穿越及代理服务器

文章目录 1. 前言2. IP 转换过程3. NAPT① 基本概念② 工作原理③ 优缺点④ 实际应用 4. 缺陷5. NAT 穿越① 概述② 示例 6. NAT 与 代理服务器① 代理服务器与NAT的区别&#xff1a;② 正向代理 / 反向代理 服务器 1. 前言 NAT&#xff08;网络地址转换&#xff09;是一种常见…

Python数据清洗基础

在Python中进行数据清洗和可视化是一个多步骤的过程&#xff0c;涉及到数据的读取、预处理、分析和图形表示。以下是一些关键步骤和代码示例&#xff0c;这些步骤可以帮助你从原始数据中提取有价值的信息&#xff0c;并以直观的方式展示。 数据清洗 读取数据&#xff1a; im…

【Python 千题 —— 基础篇】评论倾向分析

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 在某个电商平台的评论系统中,用户可以提交商品评论。为了分析评论的情感倾向,我们需要编写一个程序来处理用户评论,并对评论内容进行简单的分析和处理。…

Mac/Linux系统matplotlib中文支持问题

背景 matplotlib是python中最常用的数据可视化分析工具&#xff0c;Mac和Linux系统无中文字体&#xff0c;不支持中文显示&#xff08;希望后续可以改进&#xff09;&#xff0c;需要进行字体的下载和设置才能解决。笔者经过实践&#xff0c;发现Mac系统和Linux系统解决方案略…

1.【R语言】R语言的下载和安装

R语言是一种开源编程语言&#xff0c;它提供了丰富的统计模型和图形绘制功能&#xff0c;广泛用于数据科学、统计分析、数据挖掘和机器学习。R有一个活跃的社区和大量的包&#xff0c;可以满足各种需求&#xff0c;如数据清洗、绘图和报告生成。其强大的数据处理能力和灵活的可…

Ant Design vue 多层for循环form表单自定义校验

数据结构如下&#xff1a;三维数组。 注意&#xff1a;<a-form-model>一定得写在for外面&#xff01;&#xff01;&#xff01;&#xff01; <!-- 弹出框 --> <a-modal:title"title":dialog-style"{ top: 20px }":visible"visible&quo…

Datawhale X 李宏毅苹果书 AI夏令营 入门 Task2-了解线性模型

目录 线性模型分段线性曲线模型变形 线性模型 输入的特征 x 乘上一个权重&#xff0c;再加上一个偏置就得到预测的结果&#xff0c;这样的模型称为线性模型。 分段线性曲线 线性模型有很大的限制&#xff0c;这一种来自于模型的限制称为模型的偏差&#xff0c;无法模拟真实的…

Bluetooth: att protocol

一篇搞懂 ATT 支持的东西都有什么。 READ_BY_GROUP_TYPE_REQ/RSP 如下是 Spec 内容&#xff1a; The attributes returned shall be the attributes with the lowest handles within the handle range. These are known as the requested attributes.If the attributes with th…