Java基础知识——继承

目录

一、什么是继承

二、类的继承格式

三、继承的特点

四、继承的类型

五、继承的关键字

六、为什么使用继承


一、什么是继承

        继承是面向对象编程(OOP)的四大基本原则之一,它允许我们创建一个新类,继承并扩展现有类的属性和方法。继承是一种机制,通过这种机制,一个类可以基于另一个已存在的类来定义。已存在的类称为“父类”或“超类”,而新创建的类则称为“子类”。子类自动继承父类的属性和方法,同时还可以定义自己的新属性和方法。现实生活中也存在继承:

波斯猫和巴里猫属于猫科,沙皮狗和斑点狗属于犬科。猫科动物和犬科动物又是属于动物类。继承需要符合的关系是:is-a,父类更通用,子类更具体。

二、类的继承格式

        在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下:

class 父类 {}class 子类 extends 父类 {}

        具体代码如下:

// 父类 Animal
public class Animal {String name;public void eat() {System.out.println(name + "正在吃饭");}
}// 子类 Dog 继承自 Animal
public class Dog extends Animal {public void bark() {System.out.println(name + "正在汪汪叫");}
}

        在这个例子中,我们定义了一个名为Animal的父类,它具有一个name属性和一个eat方法。接着,我们定义了一个名为Dog的子类,它通过使用extends关键字继承了Animal类。这意味着Dog类现在有了name属性和eat方法,同时我们还为它添加了一个新的bark方法。

三、继承的特点

  1. 单继承:Java不支持多继承,即一个类不能同时继承多个父类。但可以实现多个接口。
  2. 多层继承:一个子类可以成为另一个类(孙类)的父类,形成类的层次结构。
  3. 重写:子类可以重写(覆盖)父类的方法,提供不同的实现逻辑。
  4. 访问权限:子类不能访问父类中的private成员,但可以访问public和protected成员。
  5. 构造函数:子类的构造函数会自动调用父类的无参构造函数。如果父类没有无参构造函数,需要在子类的构造函数中用显式调用父类的其他构造函数。

四、继承的类型

五、继承的关键字

1、extends关键字

  • 用于类之间的单继承关系,即一个子类只能继承一个父类。
  • 子类可以使用 extends 关键字来继承父类中非私有的属性和方法。
  • extends不仅用于基本类型的类继承,还用于在泛型中指定子类型必须为特定父类的子类。

2、implements关键字

  • 用于实现接口的情况,一个类可以实现多个接口,从而实现多继承的功能。
  • 当类实现一个接口时,需要提供接口中所有方法的具体实现,接口中的抽象方法都要实现。

3、其他相关关键字

  • super 关键字用于访问对象的直接父类的成员变量或方法。
  • this 关键字指代当前对象,常用于区分成员变量和局部变量以及在构造器中调用其他构造器。
  • final 关键字可以修饰类、方法和变量,被其修饰的类不能被继承,方法不能被重写,变量的值一旦赋值就不能更改。格式如下:
    final class 类名 {//类体}
    修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
class Parent {int num;void display() {System.out.println("This is the parent class");}
}class Child extends Parent {int num;void display() {super.display(); // 调用父类的display方法this.num = 20; // 使用this关键字引用当前对象的num属性System.out.println("This is the child class, num = " + this.num);}void show() {this.num = 10; // 使用this关键字引用当前对象的num属性System.out.println("Inside child class, num = " + this.num);}
}public class Main {public static void main(String[] args) {Child obj = new Child();obj.display(); // 输出: This is the parent class, This is the child class, num = 20obj.show(); // 输出: Inside child class, num = 10}
}

        在上面的代码中,Child类继承了Parent类。在Child类的display方法中,我们使用了super.display()来调用父类的display方法。然后,我们使用this.num来引用当前对象(即Child对象)的num属性,并将其设置为20。最后,我们在show方法中使用了this.num来引用当前对象的num属性,并将其设置为10。需要注意的是,当子类的方法与父类的方法同名时,可以使用super关键字来调用父类的方法,以避免隐藏或覆盖父类的方法。而this关键字则用于引用当前对象的属性或方法,特别是在方法参数与类成员变量同名的情况下,可以明确区分它们。

六、为什么使用继承

        继承的主要目的是实现代码的重用和扩展性。通过继承,我们可以避免重复编写相同的代码,而是将公共的属性和方法放在父类中,让所有子类共享。同时,继承也使得我们的程序更加灵活,因为可以在不修改父类的情况下,通过扩展子类来增加新的功能。

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

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

相关文章

centos7安装mysql-8.0.38-1.el7.x86_64.rpm-bundle.tar

先更新yum源 #yum源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo#epel源 wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repoyum clean allyum makecache mysql的tar包下载路径:MySQ…

redux react-redux结合使用 2024

redux & react-redux结合使用 2024 1.安装 redux react-redux yarn add redux && yarn add react-redux2.编写reducer const initstate{count:0} exports.reducer(stateinitstate,action)>{switch (action.type){case "add_action":return {count:…

【HarmonyOS学习】Calendar Kit日历管理

简介 Calendar Kit提供日历与日程管理能力,包括日历的获取和日程的创建能力。 Calendar Kit为用户提供了一系列接口来获取日历账户,并使用特定的接口向日历账户中写入日程。 如果写入的日程带有提醒时间则系统会在时间到达时向用户发送提醒。 约束点…

eclipse 新建类class文件增加copyright版权信息

1、Window -> Preferences 2、输入code,找到code templates Java > Code Style > Code Templates 比如进行如何的设置: 3、新增类文件,会自动增加版权:

C#身份证核验、身份证查询API、身份认证接口

在现代社会中,身份证作为一种重要的身份信息识别工具,被广泛应用于各种场景之中。然而,随着网络技术的发展和信息化程度的提高,越来越多的身份证信息存在安全隐患,由此也带来了一定的风险。为了确保数据安全&#xff0…

深入浅出 Vue.js:从基础到进阶的全面总结

深入浅出 Vue.js:从基础到进阶的全面总结 Vue.js 是一个用于构建用户界面的渐进式框架。它不仅易于上手,还能通过其强大的生态系统支持复杂的应用开发。本文将从基础到进阶,全面总结 Vue.js 的核心概念、常用技术和最佳实践,并提…

【linux基础】linux远程传输三种免交互方式

linux远程传输三种免交互方式 文章目录 linux远程传输三种免交互方式1、使用sshpass工具2、使用expect脚本来输入密码3、SSH 密钥对 1、使用sshpass工具 建立信任关系的做法是最方便和安全的做法,但是在有些场景下(比如远端的authorized_keys是不能随意更改的)&…

2024.7.12单片机PWM

遇到了一个光标变成下划线的问题: Keil5光标变下划线,变回来的方法_keil5光标是下划线-CSDN博客 这里是用了输入捕获(IC:input capture),输出比较(OC:Output Compare)区别 学到这…

解析DDD开发框架Axon

在微服务架构盛行的当下,领域驱动设计(DDD)也得到了崭新的发展。在DDD中包含了聚合、领域事件等核心概念,也需要引入CQRS、事件溯源等架构模式。对于开发人员而言,如何简单而高效的实现这些核心概念和架构模式是一大痛…

《简历宝典》13 - 简历中“项目经历”,内功学习 - 下篇

这一小节呢,我们继续说简历中 “项目经历” 的一些内功心法。因为项目经历比较核心,所以说完了,内功呢,我们会着重说一下 实战部分。 目录 1 所用技术的考虑 2 自我成长的突出 3 综合使用STAR法则 4 小节 1 所用技术的考虑 …

【利用Selenium+autoIt实现文件上传】

利用Selenium+autoIt实现文件上传 利用Selenium+autoIT实现文件上传autoIt脚本制作转换成exe文件java代码运行部分利用Selenium+autoIT实现文件上传 当你看到这篇文章时,证明你遇到了和我一样的难题。正常情况下我们利用selenium完全可以实现表单的提交和文件上传等操作。但当…

集群节点状态异常的解决方式

文章目录 集群节点状态异常的解决方式问题概述解决方式1.关闭所有服务2.对所有集群删除Hadoop相关文件2.1 删除Hadoop系统运行时创建的临时数据和文件2.2 删除Hadoop的数据文件 3.重新对Hadoop节点进行初始化和启用4.重启服务,检查节点状态 集群节点状态异常的解决方…

软件测试工作流程

1、目的 有效的保证软件质量;有效的制定不同测试类型(软件系统测试、音频主观性测试、专项测试、自动化测试、性能测试、用户体验测试)的软件测试计划;按照计划进行测试,发现软件中存在的问题;对软件中已经解决的问题进行有效的验证;判定测试过程和问题验证的有效性。2、…

Ext JS适用于哪些开发场景?

Ext JS是一个强大的JavaScript类库,它主要用于创建前端用户界面,是一个与后台技术无关的前端Ajax框架。基于其丰富的功能和特点,Ext JS适用于多种开发场景,主要包括以下几个方面: 1、富客户端AJAX应用 RIA&#xff08…

PostgreSQL(二十一)clog的作用与管理

一、CLOG的概念及作用 1、基础概念 (1)CLOG:记录事务号的状态,可以用其判断行的可见性。每个事务状态占用两个bit位。 tip:事务的状态有4种:IN_PROGRESS,COMMITTED,ABORTED和SUB_…

如何应对AI发展下的伦理挑战

目录 1.概述 2.构建可靠的AI隐私保护机制 2.1. 最小化数据收集 2.2. 数据去标识化 2.3. 加密技术 2.4. 分布式学习和边缘计算 2.5. 强化用户控制权 2.6. 独立审计和合规性检查 2.7. 持续教育和培训 2.8.小结 3.确保AI算法的公正性和透明度 3.1.增强AI决策透明度的方…

第一百五十九节 Java IO教程 - Java输入流、文件输入流、缓冲输入流、推回输入流

Java IO教程 - Java输入流 抽象基本组件是InputStream类。 InputStream|--FileInputStream |--ByteArrayInputStream |--PipedInputStream|--FilterInputStream|--BufferedInputStream |--PushbackInputStream |--DataInputStream |--ObjectInputStream我们有FileInputStream&…

【C++】——类和对象(中)

文章目录 类的默认成员函数构造函数析构函数拷贝构造函数赋值运算符重载运算符重载 const成员函数 类的默认成员函数 在C中,类(class)可以拥有多种成员函数,其中一些成员函数在类定义中没有显式声明时,编译器会隐式地…

JSON传输二进制

0x01 结论 JSON无法传输二进制, 若需要在JSON中传输二进制, 可以对二进制进行编码: 1. HEX To HexString 2. base64编码 若直接传送二进制, 其中无法被UTF-8解码的字节将被替换. Base64将会扩大30%的体积. 0x00 起因 我使用JSON提交了包含二进制的报文, 解析时发现很多字…

Windows上LabVIEW编译生成可执行程序

LabVIEW项目浏览器(Project Explorer)中的"Build Specifications"就是用来配置项目发布方法的。在"Build Specifications"右键菜单中选取"New",可以看到程序有几种不同的发布方法:Application(EXE)、Installer、.Net Inte…