阶段二12_面向对象高级_继承1

news2025/7/21 0:51:28

一.继承的入门介绍

(1)继承的概念理解
让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员

(2)通过extends关键字实现继承
格式:public class 子类名 extends 父类名 { }
范例:public class Zi extends Fu { }
Fu:是父类,也被称为基类、超类
Zi:是子类,也被称为派生类

二.继承的好处和弊端

(1)继承的好处
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提

(2)继承的弊端
继承是侵入性的
降低了代码的灵活性
继承关系,导致子类必须拥有父类非私有属性和方法,让子类自由的世界中多了些约束
增强了代码的耦合性
代码与代码之间存在关联都可以将其称之为"耦合"。

(3)耦合性:代码与代码之间存在关联都可以将其称之为"耦合"。
图:05/0_耦合性关系说明图.PNG
在这里插入图片描述

(4)什么时候使用继承?
当类与类之间,存在相同 (共性) 的内容,并且产生了 is a 的关系,就可以考虑使用继承,来优化代码。
举例:
学生:姓名,年龄 项目经理:姓名,工号,工资
老师:姓名,年龄 程序员:姓名,工号,工资


人:姓名,年龄 员工:姓名,工号,工资

(5)继承的好处和弊端总结
好处:提高了代码的(复用性、维护性),是多态的前提
弊端:降低了代码灵活性,增强了代码的耦合性

三.继承的特点

(1)Java只支持单继承,不支持多继承,但支持多层继承。
单继承:子类只能继承一个父类
不支持多继承:子类不能同时继承多个父类

(2)问题: 为什么不支持多继承

 public class 父类A { public void method(){System.out.println("复习数学");  } }
   public class 父类B { public void method(){ System.out.println("复习语文");} }
   public class 子类 extends 父类A , 父类B { }
   public class Test {
     public static void main(String[] args) {
          子类 z = new 子类();
          z.method();   // 复习啥?懵了!不知道调用哪个了。
     }
   }

四.继承的成员变量访问特点

在子类方法中访问一个变量
子类局部范围找 --没有–>子类成员范围找 --没有–> 父类成员范围找。
注意:
如果子父类中,出现了重名的成员变量,通过就近原则,会优先使用子类的
如果一定要使用父类的,可以通过super关键字,进行区分。
案例:

 public class Fu {  int a = 10; }
   public class Zi extends Fu {
     // 子父类当中, 出现了重名的成员变量
     int a = 20;
     public void method(){
        int a = 30;
        System.out.println(a);  //子类局部范围找 --没有-->子类成员范围找 --没有--> 父类成员范围找 【30】
        //需求1: 在控制台打印本类成员变量 20
        System.out.println(this.a);  //通过this关键字
        //需求2: 在控制台打印父类成员变量 10
        System.out.println(super.a); //通过super关键字
     }
   }

五.继承的成员变量访问特点

super 关键字的用法和 this 关键字的用法相似
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象引用)
图:05/1_this和super访问使用说明.PNG
在这里插入图片描述

六.方法重写

(1)方法重写概述
在继承体系中,子类出现了和父类中一模一样的方法声明

(2)方法重写的应用场景
当子类需要父类的功能,而功能主体子类有自己特有内容,可以重写父类中的方法,
这样,即沿袭了父类的功能,又定义了子类特有的内容

(3)注意:
方法重写: 在继承体系中, 子类出现了和父类一模一样的方法声明 (方法名, 参数列表, 返回值类型)
方法重载: 在同一个类中, 方法名相同, 参数列表不同, 与返回值无关.

(4)练习:手机类和新手机类

public class iPearV1 {
    /*
        1. 定义手机类 iPearV1  
        call(String name) : 打电话方法  
        smallBlack() : 语音助手 (speak english...)
     */
    public void call(String name){
        System.out.println("给" + name + "打电话");
    }

    public void smallBlack(){
        System.out.println("speak english...");
    }
}
public class iPearV2 extends iPearV1 {
    /*
      2. 定义新手机类 iPearV2
        call(String name) : 打电话方法
        smallBlack() : 语音助手 (speak english...  说中文)
       方法重写的应用场景:
         当子类需要父类的功能,而功能主体子类有自己特有内容
         可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
     */

    public void smallBlack(){
        super.smallBlack();
        System.out.println("说中文");
    }
}

public class TestOverride {
    /*
        需求:
        1. 定义手机类 iPearV1
           call(String name) : 打电话方法
           smallBlack() : 语音助手 (speak english...)
        2. 定义新手机类 iPearV2
           call(String name) : 打电话方法
           mallBlack() : 语音助手 (speak english...  说中文)
        注意:
            方法重写: 在继承体系中, 子类出现了和父类一模一样的方法声明 (方法名, 参数列表, 返回值类型)
            方法重载: 在同一个类中, 方法名相同, 参数列表不同, 与返回值无关.
     */
    public static void main(String[] args) {
        iPearV2 i = new iPearV2();
        i.smallBlack();
    }
}

七:方法重写注意事项

(1)父类中私有方法不能被重写
(2)父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须通过非静态方法进行重写
注意:静态方法不能被重写!如果子类中,也存在一个方法声明一模一样的方法
可以理解为,子类将父类中同名的方法,隐藏了起来,并非是方法重写

(3)子类重写父类方法时,访问权限必须大于等于父类
在这里插入图片描述

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

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

相关文章

Grafana 如何使用本地CSV文件作为数据源

Grafana提供了一个插件,可以把CSV文件作为数据源,关于CSV插件的说明,可以参考:https://grafana.com/grafana/plugins/marcusolsson-csv-datasource/?tabinstallation。我是在本地使用命令行grafana-cli plugins install marcusol…

通过45人!1-2月,誉天红帽RHCE学员再创佳绩!

学习的喜悦在于结果,也在于过程;在于取得成功时的豁然开朗,也在于持之以恒后的层层递进。结果固然重要,但在求知过程中获得的满足感,也同样让人乐在其中。 RHCE的学习过程就充满了这样的喜悦。对每一行命令的理解、对每…

【Linux学习】日积月累——调试器gdb的使用教程

一、背景 gdb是一款强大的命令行调试工具,可以形成执行程序、脚本。只需要几个简单的命令,就能够实现Windows环境下VC等IDE的图形化调式工具的功能。 调试的相关常识: 程序的发布方式有两种,debug模式和release模式;L…

197.Spark(四):Spark 案例实操,MVC方式代码编程

一、Spark 案例实操 1.数据准备 电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付 样例类: 2. Top10 热门品类 先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。 我们有多种写法,越往后性能越…

【Linux开发笔记】《Linux嵌入式开发从0到1》(一):初探Linux——与Linux的初次相遇

1.什么是Linux Linux就是一个操作系统,就是一个开源、自由的操作系统,就是一个免费使用和自由传播的类UNIX操作系统,就是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。 简单来讲,Linux就是一个操作系统而已… …

React的Hooks

React Hooks useState useMemo 和usecallback Hooks显示的指明因变量有什么好处 当使用时,y与changeX会被缓存下来,只要x不变,始终读取的是缓存的值, 如果不使用时,每次函数组件执行时,实际会基于x&#xf…

计算机写论文时,怎么引用文献? - 易智编译EaseEditing

首先需要清楚哪些引用必须注明[1]: 任何直接引用都要用引号并注明来源; 任何不是自己的口头或书面的观点、解释和结论都应注明来源; 即使不用原话,但是他人的思路、概念或观点也应注明; 不要为了适合你的观点修改原…

机器学习——无监督学习

机器学习的分类一般分为下面几种类别:监督学习( supervised Learning )无监督学习( Unsupervised Learning )强化学习( Reinforcement Learning,增强学习)半监督学习( Semi-supervised Learning )深度学习(Deep Learning)Python Scikit-learn. http: // …

day40|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…

软件测试8

一 缺陷 软件缺陷:是指软件或程序中存在的各种问题及错误,会导致软件产品在某种程度上不能满足用户的需求 二 软件缺陷的判定标准 1.软件未达到需求规格说明书中表明的功能 2.软件出现了需求规格说明书不会出现错误的地方 3.软件的功能超出了需求规格…

14 nuxt3学习(布局 渲染模式 插件plugin 生命周期)

布局 布局是围绕包含多个页面的公共用户界面的页面的包装器,例如页眉和页脚显示。 布局是使用slot 组件显示页面内容的Vue文件。 默认情况下使用layouts/default.vue文件。 自定义布局可以设置为页面元数据的一部分。 方式一:默认布局 在layouts目录下…

Xmind快捷键大全

Xmind快捷键大全 1、常用 CtrlShiftL 快捷键助手CtrlHome 返回中心主题Enter 插入主题Tab 插入子主题F2 编辑主题F3 添加/编辑标签F4 添加/编辑备注F6 下钻ShiftF6 上钻Delete 删除Ctrl] 插入摘要CtrlI 插入图片CtrlShiftH 插入超链接Ctrl1,2,3,4,5,6快速添加优先等级图标Ctr…

applicationContext相关加载

spring refresh 概述 refresh是一个方法,spring中所有的ApplicationContext容器都需要通过refresh方法初始化; 处理步骤 其中refresh方法包含12个主要的处理步骤: 1、第1个步骤做前置准备 2、第2~6步骤创建BeanFactory(Appl…

Java中垃圾回收(GC)算法详解

咱们要进行垃圾回收,是不是要知道哪些对象是垃圾,然后针对这些垃圾要怎么回收呢?那本篇文章我们就将垃圾回收分为标记垃圾、清除垃圾两个阶段讲解,详细说明每个阶段都有那些算法。1、标记阶段算法在堆里存放着几乎所有的Java对象实…

2023年交通与智慧城市国际会议(ICoTSC 2023)

2023年交通与智慧城市国际会议(ICoTSC 2023) 重要信息 会议网址:www.icotsc.org 会议时间:2023年7月28-30日 召开地点:长沙 截稿时间:2023年6月15日 录用通知:投稿后2周内 收录检索:EI,Scopus 会议简介…

轻松玩转开源大语言模型bloom(一)

前言 chatgpt已经成为了当下热门,github首页的trending排行榜上天天都有它的相关项目,但背后隐藏的却是openai公司提供的api收费服务。作为一名开源爱好者,我非常不喜欢知识付费或者服务收费的理念,所以便有决心写下此系列&#…

【Flutter】入门Dart语言:操作符的基本用法

文章目录 一、前言二、常用的操作符1.算术操作符2.关系操作符3.逻辑操作符4.赋值操作符5.三元运算符三、总结一、前言 当我们在编写Flutter应用程序时,操作符是我们不可或缺的工具。它们是用于执行各种操作的关键字和符号,可以帮助我们简化代码并提高效率。熟练掌握各种类型…

Tomcat在linux环境中开机自启(定时重启)

一、Tomcat开启自启 我们经常会遇到服务器断电或异常,而异常后tomcat中部署的web项目需要我手动去启动。为此,特别贡献出Linux环境中Tomcat开机自启的方式供学习使用。 1. 添加JAVA_HOME并配置tomcat自启 vi /etc/rc.local 添加如下语句&…

ChIP-seq 分析:基因集富集(11)

动动发财的小手,点个赞吧! 1. 基因集检测 转录因子或表观遗传标记可能作用于按共同生物学特征(共享生物学功能、RNAseq 实验中的共同调控等)分组的特定基因组。 ChIPseq 分析中的一个常见步骤是测试常见基因集是否富含转录因子结合…

分布式新闻项目实战 - 13.项目部署_持续集成(Jenkins) ^_^ 完结啦 ~

欲买桂花同载酒,终不似,少年游。 系列文章目录 项目搭建App登录及网关App文章自媒体平台(博主后台)自媒体文章审核延迟任务kafka及文章上下架App端文章搜索后台系统管理Long类型精度丢失问题定时计算热点文章(xxl-Job…