【JAVA】面向对象的编程语言(继承篇)

在这里插入图片描述


个人主页:【😊个人主页】
系列专栏:【❤️初识JAVA】


文章目录

  • 前言
  • 继承
  • 类的继承方式
  • 继承的各种类型
  • 多继承
  • 继承的特性
  • 各种继承关键字
    • extends关键字
    • implements关键字
    • super 与 this 关键字
      • super 关键字
      • this 关键字
    • final 关键字


前言

在之前的文章中,我们介绍过面向对象的编程语言,今天我们就来就进入到JAVA面对对象的编程世界,今天我们主要来介绍面向对象的编程范式中一个重要的概念——继承。
在这里插入图片描述

继承

继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

类的继承方式

在JAVA中我们可以通过 extends 关键字可以申明一个类是从另外一个类继承而来的:

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

继承的各种类型

在这里插入图片描述

多继承

Java不支持多重继承,即一个子类不能继承多个父类。这是因为多重继承可能会导致一些问题,比如:

  • 命名冲突:如果两个父类中有相同的方法属性,则子类不知道该继承哪一个。
  • 菱形继承问题:如果一个类同时继承自两个父类,这两个父类又都继承自同一个父类,则子类中会存在两个相同的父类,容易造成混乱。

为了解决这些问题,Java引入了接口(interface)的概念,使得一个类可以同时实现多个接口。虽然接口中也可以定义方法和属性,但是接口中的方法都是抽象方法,没有方法体,而且接口中的属性都是常量。这样可以避免命名冲突和菱形继承问题。通过实现不同的接口,一个类可以具有多个不同的功能。

继承的特性

  • 子类拥有父类非 private 的属性、方法
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
  • 子类可以用自己的方式实现父类的方法
  • Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。

各种继承关键字

extends关键字

在 Java 中,extends 关键字用于表示一个类继承自另一个类。子类(派生类)继承父类(基类、超类)的所有方法和属性,并且还可以添加自己的方法和属性。被继承的类称为超类或基类,继承自该类的类称为子类或派生类。

class Animal {void move() {System.out.println("动物可以移动");}
}class Dog extends Animal {void move() {System.out.println("狗可以跑和走");}
}public class TestDog {public static void main(String args[]) {Animal a = new Animal(); // Animal 对象Animal b = new Dog(); // Dog 对象a.move(); // 执行 Animal 类的方法b.move(); // 执行 Dog 类的方法}
}

Animal 类是一个超类,Dog 类是一个子类。Dog 继承了 Animal 类,并重写了 Animal 类的 move() 方法。在 main() 方法中,创建了 Animal 和 Dog 类的对象,并调用了它们的 move() 方法。由于 Animal 对象调用的是 Animal 类的 move() 方法,而 Dog 对象调用的是 Dog 类重写的 move() 方法。

implements关键字

implements是Java中的一个关键字,用于实现接口。当一个类实现一个接口时,必须使用implements关键字,并且实现该接口中定义的所有方法。

public interface MyInterface {public void method1();public void method2();
}public class MyClass implements MyInterface {public void method1() {System.out.println("Implementation of method1");}public void method2() {System.out.println("Implementation of method2");}
}

MyClass实现了MyInterface接口并实现了其中的method1和method2方法。这使得MyClass能够使用接口中定义的方法,并且可以通过多态性来引用MyInterface的实例。

super 与 this 关键字

Java 中的 super 和 this 都是关键字,分别用于访问父类和本类中的成员。

super 关键字

super 可以用来访问父类中被子类覆盖的方法和属性

super.父类方法名(参数列表);//或者
super.父类属性名;
//例如:
public class Father {public String name;public Father(String name) {this.name = name;}public void eat(String food) {System.out.println(name + " is eating " + food);}
}public class Son extends Father {public int age;public Son(String name, int age) {super(name);this.age = age;}@Overridepublic void eat(String food) {super.eat(food); // 调用父类的 eat 方法System.out.println(name + " is " + age + " years old");}
}public class Test {public static void main(String[] args) {Son son = new Son("Tom", 18);son.eat("apple");}
}

其中,父类方法和属性必须是被子类继承和覆盖的。在子类中,如果要访问父类中的成员,就可以使用 super 关键字。

this 关键字

this 关键字可以用来引用当前对象的属性或方法

this 关键字可以用来引用当前对象的属性或方法//或者
this 关键字可以用来引用当前对象的属性或方法
//例如:
public class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public void getInfo() {System.out.println("Name: " + this.name);System.out.println("Age: " + this.age);}
}public class Test {public static void main(String[] args) {Student s = new Student("Tom", 18);s.getInfo();}
}

final 关键字

Java 中的 final 关键字用于表示不可变的值或不可变的引用
对于变量,final 修饰的变量表示为常量,一旦被赋值后不能被修改。

  • 对于方法,final 修饰的方法表示方法不能被子类重写。
  • 对于类,final 修饰的类表示类不能被继承。

使用 final 可以使程序更加安全可靠,因为常量值不变,可以防止意外修改值导致程序出错;final 方法和类可以保证方法和类的行为不会被改变,有助于程序设计和优化。
在这里插入图片描述

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

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

相关文章

Java中网络的基本介绍。网络通信,网络,ip地址,域名,端口,网络通信协议,TCP/IP传输过程,网络通信协议模型,TCP协议,UDP协议

- 网络通信 概念:网络通信是指通过计算机网络进行信息传输的过程,包括数据传输、语音通话、视频会议等。在网络通信中,数据被分成一系列的数据包,并通过网络传输到目的地。在数据传输过程中,需要确保数据的完整性、准…

【EI/SCOPUS会议征稿】第二届环境遥感与地理信息技术国际学术会议(ERSGIT 2023)

第二届环境遥感与地理信息技术国际学术会议 2023 2nd International Conference on Environmental Remote Sensing and Geographic Information Technology 第二届环境遥感与地理信息技术国际学术会议(ERSGIT 2023)定于2023年11月10-12日在中国陕西西安…

“搞事情”?OpenAl将于11月召开其首届开发者大会

摘要:OpenAI也要召开它的第一届开发者大会了。这次活动,或许标志着OpenAI向其下一阶段的商业开发迈出了关键一步。 昨天,OpenAI宣布将于11月6日举办其首次开发者大会。在这场名为“OpenAI DevDay”的活动中,OpenAI的技术人员将进行…

10、哈希函数与哈希表

哈希函数 出现次数最多的 32G 小文件方法:利用哈希函数在种类上均分 设计RandomPool结构 设计一种结构,在该结构中有如下三个功能: insert(key):将某个key加入到该结构,做到不重复加入 delete(key):将原本在结构中的某个key移除 getRando…

【Sentinel】Sentinel与gateway的限流算法

文章目录 1、Sentinel与Hystrix的区别2、限流算法3、限流算法对比4、Sentinel限流与Gateway限流 1、Sentinel与Hystrix的区别 线程隔离有两种方式实现: 线程池隔离(Hystrix默认采用)信号量隔离(Sentinel默认采用) 服…

vue 分页器组件+css动画效果

全网都找了一遍没有找到符合UI需求的分页动画,于是就主动上手了 需求: 1、分页最多显示9页,总页数最多显示无上限; 2、点击下一页的时候需要有动画效果过度,如果当前页数是当前显示最后的一页,则停了当前…

337. 打家劫舍 III

337. 打家劫舍 III C代码:二叉树 动态规划 typedef struct { // 每个节点都有两个状态:选中、不选中int selected;int notSelected; } SubtreeStatus;SubtreeStatus dfs(struct TreeNode *node) {if (!node) {return (SubtreeStatus){0, 0};}SubtreeS…

FPGA实战小项目2

基于FPGA的贪吃蛇游戏 基于FPGA的贪吃蛇游戏 基于fpga的数字密码锁ego1 基于fpga的数字密码锁ego1 基于fpga的数字时钟 basys3 基于fpga的数字时钟 basys3

【人月神话】重新探索人月神话:软件工程的现实与挑战

人月神话是一篇由美国软件工程师弗雷德里克布鲁克斯所写的软件工程经典之作,最早发表于1975年。这篇文章的全名是《人月神话:软件工程的神话与现实》(The Mythical Man-Month: Essays on Software Engineering),它涵盖…

【算法专题突破】双指针 - 三数之和(7)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 1. 题目解析 题目链接:15. 三数之和 - 力扣(Leetcode) 题目就是要找出和为0的不重复的三元组, 注意三元组的每个元素是得不同的位置,那不重复又…

JDK1.8下载、安装和环境配置使用

JDK1.8下载、安装和配置 下载安装包解压文件配置测试安装 下载安装包 链接地址 https://pan.baidu.com/s/1RF7-ulq0_qAelpXskDxdvA 提取码 d1y0解压文件 jdk1.8.0_181 配置 右击我的电脑,选择属性 2.点击高级系统设置 在系统变量区里点击:新建…

数据结构-01 数据结构基本概念,算法时间复杂度,空间复杂度

0 数据结构概述 四门课的关系 1 绪论 数据对象、数据元素、数据项关系 1.1 数据结构的基本概念 1.2 算法和算法评价 小练习 空间复杂度中的递归调用 n只是传入 n也是数组,计算存储数组flag的空间大小

【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项

本文档主要记录嵌入式C语言在子函数中应用malloc函数的方式,在实际项目中内存管理特别重要 一般在主函数中(main)使用malloc函数,然后在通过free函数进行释放内存,但有时候如果必须在子函数长调用malloc函数该怎样进行…

【MySql】数据库的CRUD(增删查改)

写在最前面的话 哈喽,宝子们,今天给大家带来的是MySql数据库的CRUD(增删改查),CRUD是数据库非常基础的部分,也是后端开发日常工作中最主要的一项工作,接下来让我们一起进入学习吧,感…

多功能透明屏,在智能家居领域中,有哪些功能特点?显示、连接

多功能透明屏是一种新型的显示技术,它能够在透明的表面上显示图像和视频,并且具有多种功能。 这种屏幕可以应用于各种领域,如商业广告、智能家居、教育等,为用户提供更加便捷和多样化的体验。 首先,多功能透明屏可以…

DockerCompose部署es和kibana

DockerCompose文件 version: 3.1 services:elasticsearch:image: elasticsearch:7.13.3container_name: elasticsearchprivileged: trueports:- "9200:9200"- "9300:9300"environment:- ES_JAVA_OPTS-Xms128m -Xmx1024m #设置使用jvm内存大小- cluster.na…

【牛客刷题】bfs和dfs (二叉树层序遍历、矩阵最长递增路径、被围绕的区域)

二叉树层序遍历 vector<vector<int> > levelOrder(TreeNode* root) {// write code herevector<int> res;vector<vector<int>> result;if (root nullptr) return result;queue<TreeNode*> que;que.push(root);while (!que.empty()) {int …

算法专题:前缀和

文章目录 Acwing&#xff1a;前缀和示例2845.统计趣味子数组的数目思路容易理解的写法&#xff1a;前缀和两层循环存在问题&#xff1a;超时 优化写法&#xff1a;两数之和思路&#xff0c;转换为哈希表 前缀和&#xff0c;就是求数组中某一段的所有元素的和。 求子数组中某一…

【C++基础】类与对象(中):默认成员函数、构造函数、析构函数、拷贝构造、赋值重载函数……

​&#x1f47b;内容专栏&#xff1a; C/C编程 &#x1f428;本文概括&#xff1a; C基础语法。六大默认构造函数简介、构造函数、析构函数、拷贝构造函数、赋值重载函数、const成员函数、取地址重载等。 &#x1f43c;本文作者&#xff1a; 阿四啊 &#x1f438;发布时间&…

K8S:kubeadm搭建K8S+Harbor 私有仓库

文章目录 一.部署规划1.主机规划2.部署流程 二.kubeadm搭建K8S1.环境准备2.安装docker3. 安装kubeadm&#xff0c;kubelet和kubectl4.部署K8S集群&#xff08;1&#xff09;初始化&#xff08;2&#xff09;部署网络插件flannel&#xff08;3&#xff09;创建 pod 资源 5.部署 …