(四)面向对象:

5、继承:
(1)理解:
        概念:

                继承是面向对象的三大特征之一

                继承是类与类之间关系的一种(是父类与子类的关系)

        使用场景:

                一个类与另一个类之间存在is a 的关系,这两个类他们有相似的属性和行为,那这个类就可以继承另一个类。

                eg:例如,蛇继承了爬行动物,爬行动物继承了动物,我们就可以描述:蛇 is a 爬行动物,爬行动物是动物中的一种。

        使用带来的优点:

                ①提高代码的复用性,子类继承父类后,可以直接使用父类中非私有的属性与方法

                ②提高了代码的可维护性,只要修改父类,子类就可以全部生效

                ③提高了代码的可拓展性,子类继承父类,在子类中定义自己特有的方法,拓展功能

                ④是多态的前提

        缺点:

                ①继承让代码与代码之间有了关系,耦合度上升

                ②父亲修改后,子类不得不跟着变化,削弱了子类的独立性,降低了代码的灵活性

(2)继承的实现与特点:
        实现:

                 ①使用extends关键字

                 ②格式:[ public ] class 子类名 extends 父类名{

                                }

                 ③相关名词:父类又称基类,超类;子类又称泛生类。

案例展示:

//定义Person类,作为父类
class Person {private String name;public void setName(String name) {this.name = name;}public void sayHello() {System.out.println("hello~ I am " + name);}
}//定义Student类,作为子类继承Person
class Student extends Person {// 新增内容可以为空
}//测试类
public class Test{// 测试代码public static void main(String[] args) {// 实例化一个子类对象Student stu = new Student();// setName方法从父类中继承而来stu.setName("tom");// sayHello方法从父类中继承而来stu.sayHello();}
}
        特点:

        Java只支持单继承,不支持多继承。即一个类只能继承一个类,不能同时继承两个父类。

        Java支持多层继承,即a类继承b类,b类继承c类。

        如果一个类没有显式继承另外一个类,则默认继承Object类

补充:1、Java支持多实现,即一个类可以实现多个接口;

           2、Object类(这里简单介绍方法的作用,至于具体用法,大家可以适当拓展)

clone():

        有返回值,是Object类型

        不会改变原对象

        用处:创建该对象的一个副本,并返回

----------------------------------------------------------

equals():

        有返回值,为boolean型

        不会改变原对象

        用处:用于判断两个对象是否相等,其实比较的是两个对象的引用地址值,想要对内容进行比较,需要重写方法

-----------------------------------------------------------

getClass():

        有返回值,返回此对象的运行时类名

        不会改变原对象

        用处:返回对象的运行时类

-----------------------------------------------------------

hashCode():

        有返回值,返回int型

        不会改变原对象

        用处:返回对象的哈希码,帮助在哈希表中快速定位对象的位置。默认实现是根据对象的引用地址计算哈希码

-----------------------------------------------------------

toString():

        有返回值,为String类型

        不会改变原对象

        用处:返回对象的字符串表示形式,默认实现形式为:类名@哈希码的十六进制

        注意事项:

        子类只能继承父类所有的非私有的成员

(private不能直接使用子类,如果父类中有共有的方法控制这个属性,那子类可以控制。)

案例展示,增加理解:

父类Animal.java

//提供父类
public class Animal {//成员一个私有,一个公有private String color;public int age;//提供get|set方法public String getColor() {return color;}public void setColor(String color) {this.color = color;}public int getAge() {System.out.println("in Animal getAge() ...");return age;}public void setAge(int age) {this.age = age;}
}

子类Dog.java

//定义Dog子类 继承 Animal
public class Dog extends Animal {// 父类中的private成员,子类中不可以直接操作(无直接访问权限)// Animal: private String color;// 父类中的非private成员,子类中可以直接操作// Animal: public int age;// 子类新增属性private String name;// 子类新增get|set方法public void setName(String name) {this.name = name;}public String getName() {return name;}// 子类新增方法:输出子类对象所有属性(含新增属性、从父类继承)public void disp() {// 子类方法中 不能直接操作 父类private成员// System.out.println("继承 color: " + color); error// 子类方法中 可以间接操作(借助public的get|set) 父类private成员System.out.println("继承 color: " + getColor());// 子类方法中 可以直接操作 父类非private成员System.out.println("继承 age: " + age);System.out.print("新增:" + name);}
}

测试类:

public class Test0204_AccessMember {public static void main(String[] args) {Animal a = new Animal();a.setColor("black");a.setAge(3);a.show();System.out.println("------------");Dog d = new Dog();//子类对象调用从父类继承的public方法d.setColor("yellow");d.setAge(2);//子类对象调用新增的方法d.setName("虎子");d.disp();}
}
        内存结构:

(3)super关键字:
        定义:

                与this相似,this表示自己;super表示父类,可以理解为父类对象的引用

        变量访问优先级:

                1. 先在子类局部范围中找局部变量      

                2. 再在子类新增的范围中查找

                3. 最后从父类继承的成员范围中查找

(4)构造方法的继承:
        用处:

                子类对象初始化,要借助父类的构造方法,对父类部分成员进行初始化

        注意:

                子类构造方法使用前,会优先找到父类的构造方法调用,默认调用父类的无参构造,对父类继承部分成员进行初始化,父类初始化后,在调用子类的构造代码。

                子类可以通过super(参数),显式调用父类的构造器,但注意必须放在构造方法中的第一行,注释除外,由于this()也要放在第一行,因此他们不能同时使用

                 显式调用父类的构造器后,就不会再默认调用父类的无参构造了

                 显式调用的父类的构造方法,父类中必须定义了

(5)静态成员(属性与方法)的继承:

        子类可以继承父类的静态成员,但不能重写

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

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

相关文章

QGIS绿色版吉林一号切片体验版插件(Jilin1Tiles)更新

吉林一号更新2024年图源了但吉林一号切片体验版插件(Jilin1Tiles)还没有更新,我修改了一下代码,直接集成到QGIS绿色版中。如下:注意:第一次使用的时候需要选中启用一下插件:需要使用的可以直接下…

git操作命令和golang编译脚本

git子模块信息处理命令git init submodule git submodule updategit取消合并 git merge --abort git reset --hard HEAD{1}bat文件生成二进制set GOOSlinux set GOARCHamd64 go env -w GOFLAGS-modvendor go build -ldflags "-w -s" -ohallapiset GOOSlinux set GOAR…

通往L4之路:构建自我进化的智能驾驶决策大脑

摘要: 本文旨在提出一个超越当前主流“感知-预测-规划”分离式架构的下一代自动驾驶决策系统方案。面对自动驾驶领域最核心的“长尾场景”难题,本文借鉴并升华了一套源于复杂策略制定的决策智能框架,通过构建动态驾驶世界模型(Dyn…

AI编程助手:终结996的新希望

引言程序员工作现状与“996”现象的普遍性AI技术快速发展对编程效率的潜在影响核心问题:AI IDE与AI辅助编程能否改变传统开发模式AI IDE与AI辅助编程的核心技术AI IDE的定义与功能(代码补全、错误检测、自动重构等)AI辅助编程工具&#xff08…

Anthropic 禁止 OpenAI 访问 Claude API:商业竞争与行业规范的冲突

Anthropic 禁止 OpenAI 访问 Claude API:商业竞争与行业规范的冲突 文章来源:Poixe AI 本周,美国 AI 公司 Anthropic 宣布禁止 OpenAI 通过 API 访问其 Claude 系列大模型。这一举动引发了行业对"友好基准测试"与商业竞争边界的热…

区块链 + 物联网落地案例:供应链溯源系统开发全记录

本文详细记录了区块链与物联网技术融合的供应链溯源系统开发全流程。从项目背景出发,阐述传统供应链溯源痛点,介绍系统开发的技术架构设计,包括物联网数据采集层、区块链数据存储层等核心模块,详解硬件选型、智能合约编写、数据上…

Windows环境下Intel Fortran如何安装配置NetCDF

NetCDF(Network Common Data Form)格式,简称nc格式,是一种自描述、与平台无关的二进制数据文件,特别适合多维数据的存储和交换,广泛应用于气象、海洋、地球科学等领域。本文介绍Windows环境下IntelFortran安装配置NetCDF的过程。 一、系统环境及准备工作 1. 系统 Wind…

tcp/udp的socket特点

tcp : 绑定一个 socket 只是用来监听,accept 对每个客户端生成一个 socket 用来维护滑动窗口等。每个客户端用一个 socket 用来维护滑动窗口等。 4 次挥手对应两次 close 的 fin 和返回的 ack。 而三次挥手在 connect 里阻塞完成。 ​udp : 双…

Linux命令top

top一、 命令二、 如何查看top输出的结果一、 命令 top命令是Linux中的一个实时进程监控工具,类似于windows中的任务管理器。 基本命令 top二、 如何查看top输出的结果 我们需要分析top输出的结果 top输出的结果分为上下两部分,先看上半部分 第一行是…

Perl 数据库连接

Perl 数据库连接 概述 Perl是一种强大的编程语言,广泛应用于文本处理、系统管理、网络编程等领域。随着数据库技术的快速发展,Perl与数据库的结合也日益紧密。本文将详细介绍Perl数据库连接的相关知识,包括常用的数据库类型、连接方法以及一些…

jenkins从入门到精通-P1—九五小庞

1. jenkins的两个核心为CI持续集成 CD持续部署2.jenkins在企业工作中的流程3. 学习的内容包括

第九节 Redis 事务、Redis 脚本

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务是一个原子操作&#x…

托福阅读37-2

托福阅读37-2 1.reinforcement from reintroduction定位到倒数第二句,这里我没看懂former和term,直接懵掉了,然后往后看。这句话其实省略了,补充完应该是The former is termed reintroduction and the latter is termed reinforce…

docker-compose一键部署Springboot+Vue前后端分离项目

1. 背景说明 后端使用JDK8,前端为普通Vue项目前端访问后端接口,统一带了前缀/api 2. 项目配置 2.1 后端 yml文件里配置统一访问前缀/api2.2 前端 API路径配置为相对路径:说明:我这边前后端应用都是部署在同一台服务器上&#xff0…

Unity_数据持久化_XML基础

Unity数据持久化 三、XML数据持久化 3.1 XML基础概念 3.1.1 什么是XML XML(eXtensible Markup Language)**是一种可扩展的标记语言,用于存储和传输数据。它具有以下特点: 结构化:数据以层次结构组织可读性:…

大语言模型的解码策略:贪婪解码与波束搜索

在自然语言生成任务(如机器翻译、文本摘要、图像描述等)中,语言模型通常会输出一个词的概率分布,但模型本身并不会自动告诉你应该选哪些词作为最终的输出句子。因此,我们需要设计一个“解码策略”来从这些概率中生成可…

智慧园区:中小企业的 “减压阀” 与数字化招商革命

在当前的经济环境下,中小企业的生存发展面临着诸多挑战,其中选址成本俨然成为了创业路上的 “第一道坎”。传统招商模式中,信息不对称的问题尤为突出,初创企业常常因此陷入选址失误的困境。有的企业选在交通不便的地方&#xff0c…

从零开始配置pytorch环境

总结了一下几篇热门文章和自己的经验,方便以后换设备配置环境 一、安装Anaconda 这一步是为了不污染全局环境,很有必要。 直接清华源镜像下载:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 根据自…

离线录像文件视频AI分析解决方案

前言 在安防领域,视频的价值不言而喻,尤其是录像文件的价值显得更是尤为重要。在一个安防项目上视频录像一般存储1个月、3个月甚至更长时间,这就形成了海量的离线录像文件数据。传统安防项目对录像文件的处理还有一定的局限性: 事…

人工智能与金融:金融服务的重塑

1. AI 驱动金融变革:从 “标准化” 到 “智能化”1.1 传统金融的痛点与 AI 的破局传统金融行业长期面临三大瓶颈:服务效率低下:银行柜台办理一笔贷款需 3-5 个工作日,人工审核流程繁琐,客户等待时间长;风险…