【day11】面向对象编程进阶(继承)

概述

本文深入探讨面向对象编程的核心概念,包括继承、方法重写、thissuper关键字的使用,以及抽象类和方法的定义与实现。通过本文的学习,你将能够:

  1. 理解继承的优势。
  2. 掌握继承的使用方法。
  3. 了解继承后成员变量和成员方法的访问特点。
  4. 掌握方法重写及其应用场景。
  5. 学会使用this关键字调用当前对象的成员。
  6. 学会使用super关键字调用父类的成员。
  7. 定义抽象方法和抽象类。
  8. 重写抽象方法。

第一章:继承

1. 什么是继承

继承是一种代码复用机制,通过将共通代码抽取到父类中,子类可以直接继承父类的功能。在Java中,使用extends关键字实现继承。

注意点:

  • 子类可以继承父类的非私有成员,但不能访问私有成员。
  • 构造方法不能被继承。

学习继承:

  • 应从能否“使用”的角度来学习继承,而非“拥有”。
    在这里插入图片描述

2. 继承如何使用

定义一个父类,将重复代码放入其中。然后,定义子类继承父类,通过extends关键字。创建子类对象后,可以直接使用父类中的非私有成员。

public class Employee {String name;int age;public void work(){System.out.println("工作");}private void eat(){System.out.println("员工要干饭");}
}public class Teacher extends Employee{}public class Manager extends Employee{
}

3. 继承中,成员变量和成员方法的访问特点

成员变量
  • 不重名情况: 子类和父类可以拥有同名成员变量,但访问时会根据对象类型决定访问哪个变量。
public class Fu {int numFu = 100;
}public class Zi extends Fu{int numZi = 10;
}public class Test01 {public static void main(String[] args) {Fu fu = new Fu();System.out.println(fu.numFu);//父类中的numFuZi zi = new Zi();System.out.println(zi.numZi);System.out.println(zi.numFu);//继承了父类,可以使用父类中非私有成员}
}
  • 重名情况: 当子类和父类成员变量重名时,访问时会优先使用子类的成员变量,如果子类没有,则访问父类的成员变量。
public class Fu {int numFu = 100;int num = 10000;
}public class Zi extends Fu{int numZi = 10;int num = 1000;
}
成员方法
  • 方法调用:new的对象是谁,优先调用谁的方法。如果子类没有该方法,则会寻找父类中的方法。
public class Fu {public void methodFu(){System.out.println("我是父类中的methodFu");}public void method(){System.out.println("我是父类中的method方法");}
}public class Zi extends Fu{public void methodZi(){System.out.println("我是子类中的methodZi方法");}public void method(){System.out.println("我是子类中的method方法");}
}

4. 方法的重写

方法重写是指子类中有一个与父类方法名和参数列表相同的方法。使用@Override注解可以检测是否为重写方法。

注意事项:

  1. 子类重写父类方法之后,权限必须要保证大于等于父类权限(权限指的是访问权限)
    public -> protected -> 默认 -> private
  2. 子类方法重写父类方法,方法名和参数列表要一样
  3. 私有方法不能被重写,构造方法不能被重写,静态方法不能被重写
  4. 子类重写父类方法之后,返回值类型应该是父类方法返回值类型的子类类型
public class Fu {public void methodFu(){System.out.println("我是父类中的methodFu方法");}public void method(){System.out.println("我是父类中的method方法");}void method01(){}/* public static void method02(){}*/public Fu method03(){return null;}
}
public class Zi extends Fu{public void methodZi(){System.out.println("我是子类中的methodZi方法");}@Overridepublic void method(){System.out.println("我是子类中的method方法");}@Overridepublic void method01(){}/* public static void method02(){}*/@Overridepublic Zi method03(){return null;}
}

使用场景: 功能升级改造,子类需要对父类中已经实现好的功能进行重新改造

public class Fu {public void methodFu(){System.out.println("我是父类中的methodFu方法");}public void method(){System.out.println("我是父类中的method方法");}
}public class Zi extends Fu{public void methodZi(){System.out.println("我是子类中的methodZi方法");}@Overridepublic void method(){System.out.println("我是子类中的method方法");}
}

在这里插入图片描述

第二章:superthis

1. 继承中构造方法的特点

  • 当创建子类对象时,会先初始化父类,即执行父类的构造方法。
public class Fu {public Fu(){System.out.println("我是父类中的无参构造");}
}public class Zi extends Fu{public Zi(){super();System.out.println("我是子类中的无参构造");}public Zi(int i){super();System.out.println("我是子类中的有参构造");}
}

2. superthis的具体使用

super
  • 调用父类构造方法: 在子类构造方法中使用super()调用父类无参构造,或使用super(实参)调用父类有参构造。
  • 调用父类成员变量和方法: 使用super.成员变量名super.成员方法名(实参)
public class Fu {int num = 10;public Fu(){System.out.println("我是父类中的无参构造");}public Fu(int data){System.out.println("我是父类中的有参构造");}public void method(){System.out.println("我是父类中的method方法");}
}public class Zi extends Fu{int num = 100;public Zi(){super();System.out.println("我是子类中的无参构造");}public Zi(int num){super(10);System.out.println("我是子类中的有参构造");}public void method(){super.method();System.out.println("我是子类中的method方法");System.out.println(num);System.out.println(super.num);}
}
this
  • 调用当前对象的构造方法: 在构造方法中使用this()调用当前对象的无参构造,或使用this(实参)调用当前对象的有参构造。
  • 调用当前对象的成员变量和方法: 使用this.成员变量名this.成员方法名(实参)
public class Person {int num = 10;public Person(){this();System.out.println("我是Person中的无参构造");}public Person(int data){this();System.out.println("我是Person中的有参构造");}public void method(){int num = 20;System.out.println(num);System.out.println(this.num);this.method01();System.out.println("我是Person类中的method方法");}public void method01(){System.out.println("我是Person类中的method01方法");}
}

3. 继承的特点

  • Java只支持单继承,不支持多继承。
  • 继承支持多层继承。
  • 一个父类可以有多个子类。
  • 构造方法、私有方法和静态方法不能被继承或重写。

第三章:抽象

在这里插入图片描述

1. 抽象的介绍

抽象类和抽象方法是面向对象编程中用来表达共性和多样性的工具。抽象方法没有具体实现,必须在子类中重写。

关键字:

  • abstract用于定义抽象方法和抽象类。

注意事项:

  • 抽象方法所在的类必须是抽象类。
  • 子类必须重写父类中的所有抽象方法,除非子类也是抽象类。
  • 抽象类不能被直接实例化,只能通过子类对象来调用重写的方法。
public abstract class Animal {public abstract void eat();public abstract void drink();
}public class Dog extends Animal{@Overridepublic void eat() {System.out.println("狗啃骨头");}@Overridepublic void drink() {System.out.println("狗喝水");}
}

2. 抽象的注意事项

  • 抽象类不能直接创建对象,只能创建非抽象子类的对象。
  • 抽象类中可以包含成员变量、构造方法和成员方法。
public abstract class Employee {private String name;private int age;public Employee() {}public Employee(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public abstract void work();
}

第四章:综合案例

在这里插入图片描述

本章节通过一个IT公司的员工体系案例,展示了如何定义类、指定继承关系,并实现工作方法的调用。

案例描述:
某IT公司根据员工的工作内容,划分了不同的部门和职位。每个员工都有员工编号和姓名,并执行他们负责的工作。

类的定义和继承关系:

  • Employee:基类,包含员工编号和姓名。
  • Developer:抽象类,继承自Employee,代表研发部员工。
  • JavaEEAndroid:具体类,继承自Developer,代表不同的研发工程师。
  • Maintainer:抽象类,继承自Employee,代表维护部员工。
  • NetworkHardware:具体类,继承自Maintainer,代表不同的维护工程师。

对象创建和方法调用:
通过创建具体工程师类的对象,调用work方法,展示每个员工的工作内容。

public abstract class Employee {private int id;private String name;public Employee() {}public Employee(int id, String name) {this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public abstract void work();
}public abstract class Developer extends Employee{
}public class JavaEE extends Developer{@Overridepublic void work() {System.out.println("员工号为:"+this.getId()+"的"+this.getName()+"正在开发网站");}
}public class Android extends Developer{@Overridepublic void work() {System.out.println("员工号为:"+this.getId()+"的"+this.getName()+"正在开发app");}
}public class Test01 {public static void main(String[] args) {JavaEE javaEE = new JavaEE();javaEE.setId(1);javaEE.setName("涛哥");javaEE.work();System.out.println("===============");Android android = new Android();android.setId(2);android.setName("金莲");android.work();}
}

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

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

相关文章

随手记:小程序兼容后台的wangEditor富文本配置链接

场景&#xff1a; 在后台配置wangEditor富文本&#xff0c;可以文字配置链接&#xff0c;图片配置链接&#xff0c;产生的json格式为&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

6.8 Newman自动化运行Postman测试集

欢迎大家订阅【软件测试】 专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 1 安装Node.js2 安装Newman3 使用Newman运行Postman测试集3.1 导出Postman集合3.2 使用Newman运行集合3.3 Newman常用参数3.4 Newman报告格式 4 使用定时任务自动化执行脚本4.1 编写B…

计算机网络之王道考研读书笔记-2

第 2 章 物理层 2.1 通信基础 2.1.1 基本概念 1.数据、信号与码元 通信的目的是传输信息。数据是指传送信息的实体。信号则是数据的电气或电磁表现&#xff0c;是数据在传输过程中的存在形式。码元是数字通信中数字信号的计量单位&#xff0c;这个时长内的信号称为 k 进制码…

法规标准-C-NCAP评测标准解析(2024版)

文章目录 什么是C-NCAP&#xff1f;C-NCAP 评测标准C-NCAP评测维度三大维度的评测场景及对应分数评星标准 自动驾驶相关评测场景评测方法及评测标准AEB VRU——评测内容(测什么&#xff1f;)AEB VRU——评测方法(怎么测&#xff1f;)车辆直行与前方纵向行走的行人测试场景&…

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书正式赛题

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书-A 目录 一、竞赛阶段 二、竞赛任务书内容 &#xff08;一&#xff09;拓扑图 &#xff08;二&#xff09;模块A 基础设施设置与安全加固(200分) &#xff08;三&#xff09;B模块安全事件响应/网络安全数据取证/…

Halcon例程代码解读:安全环检测(附源码|图像下载链接)

安全环检测核心思路与代码详解 项目目标 本项目的目标是检测图像中的安全环位置和方向。通过形状匹配技术&#xff0c;从一张模型图像中提取安全环的特征&#xff0c;并在后续图像中识别多个实例&#xff0c;完成检测和方向标定。 实现思路 安全环检测分为以下核心步骤&…

Java——多线程进阶知识

目录 一、常见的锁策略 乐观锁VS悲观锁 读写锁 重量级锁VS轻量级锁 总结&#xff1a; 自旋锁&#xff08;Spin Lock&#xff09; 公平锁VS非公平锁 可重入锁VS不可重入锁 二、CAS 何为CAS CAS有哪些应用 1&#xff09;实现原子类 2&#xff09;实现自旋锁 CAS的ABA…

达梦 本地编码:PG_GBK, 导入文件编码:PG_UTF8错误

问题 达梦 本地编码&#xff1a;PG_GBK, 导入文件编码&#xff1a;PG_UTF8错误 解决 右键管理服务器 查看配置 新建一个数据库实例&#xff0c;配置跟之前的保持一致 新建一个用户&#xff0c;跟以前的用户名一样 在用户上&#xff0c;右键导入&#xff0c;选择dmp的位置 导…

深度学习卷积神经网络CNN之MobileNet模型网络模型详解说明(超详细理论篇)

1.MobileNet背景 2.MobileNet V1论文 3. MobileNett改进史 4. MobileNet模型结构 5. 特点&#xff08;超详细创新、优缺点及新知识点&#xff09; 一、MobileNet背景 随着移动设备的普及&#xff0c;深度学习模型的应用场景逐渐扩展至移动端和嵌入式设备。然而&#xff0c;传统…

垂起固定翼无人机大面积森林草原巡检技术详解

垂起固定翼无人机大面积森林草原巡检技术是一种高效、精准的监测手段&#xff0c;以下是对该技术的详细解析&#xff1a; 一、垂起固定翼无人机技术特点 垂起固定翼无人机结合了多旋翼和固定翼无人机的优点&#xff0c;具备垂直起降、飞行距离长、速度快、高度高等特点。这种无…

kubernates实战

使用k8s来部署tomcat 1、创建一个部署&#xff0c;并指定镜像地址 kubectl create deployment tomcat6 --imagetomcat:6.0.53-jre82、查看部署pod状态 kubectl get pods # 获取default名称空间下的pods kubectl get pods --all-namespaces # 获取所有名称空间下的pods kubect…

数据挖掘之认识数据

在数据挖掘过程中&#xff0c;数据的认识是非常重要的一步&#xff0c;它为后续的数据分析、建模、特征选择等工作奠定基础。以鸢尾花数据集&#xff08;Iris Dataset&#xff09;数据集之鸢尾花数据集&#xff08;Iris Dataset&#xff09;-CSDN博客为例&#xff0c;下面将介绍…

统信UOS 1071 AI客户端接入本地大模型配置手册

文章来源&#xff1a;统信UOS 1071本地大模型配置手册 | 统信软件-知识分享平台 1. OS版本确认 1.1. 版本查看 要求&#xff1a;计算机&#xff0c;属性&#xff0c;查看版本&#xff08;1070,构建号> 101.100&#xff09; 2. UOS AI版本确认 UOS AI&#xff0c;设置&am…

定时任务——定时任务技术选型

摘要 本文深入探讨了定时任务调度系统的核心问题、技术选型&#xff0c;并对Quartz、Elastic-Job、XXL-Job、Spring Task/ScheduledExecutor、Apache Airflow和Kubernetes CronJob等开源定时任务框架进行了比较分析&#xff0c;包括它们的特点、适用场景和技术栈。文章还讨论了…

麒麟操作系统服务架构保姆级教程(二)sersync、lsync备份和NFS持久化存储

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 上篇文章我们说到rsync虽好&#xff0c;但是缺乏实时性&#xff0c;在实际应用中&#xff0c;咱们可以将rsync写进脚本&#xff0c;然后写进定时任务去备份&#xff0c;如果每天凌晨1&#xff1a;00…

wtforms+flask_sqlalchemy在flask-admin视图下实现日期的修改与更新

背景&#xff1a; 在flask-admin 的modelview视图下实现自定义视图的表单修改/编辑是件不太那么容易的事情&#xff0c;特别是想不自定义前端view的情况下。 材料&#xff1a; wtformsflask_sqlalchemy 制作&#xff1a; 上代码 1、模型代码 from .exts import db from …

【AIGC-ChatGPT进阶副业提示词】末日生存指南 2.0:疯狂科学家的荒诞智慧

引言 在这个不断变化的世界中&#xff0c;末日似乎总是lurking在角落。但是&#xff0c;亲爱的幸存者们&#xff0c;不要害怕&#xff01;因为我&#xff0c;疯狂科学家2099&#xff0c;正在这里为你们带来最新版本的末日生存指南。这不是你祖母的应急手册&#xff0c;而是一本…

BiLSTM:深度学习中的双向长短期记忆网络

目录 ​编辑 1. BiLSTM原理 2. BiLSTM的应用案例 3. BiLSTM研究进展 4. BiLSTM技术挑战 5. BiLSTM未来趋势 6. BiLSTM的实际应用示例 6.1 数据准备 6.2 构建BiLSTM模型 6.3 训练模型 6.4 评估模型 6.5 可视化训练过程 7. 结论 在深度学习的浪潮中&#xff0c;BiLS…

RK3588 , mpp硬编码yuv, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ Ubuntu x64 架构, 交叉编译aarch64 FFmpeg mppRK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBRK3588 , mpp硬编码yuv, 保存MP4视频文件.

powershell美化

powershell美化 写在前面 除了安装命令&#xff0c;其他都是测试命令&#xff0c;后续再写进配置文件 安装主题控件 安装主题oh-my-posh&#xff0c;powershell中执行 winget install JanDeDobbeleer.OhMyPosh -s winget oh-my-posh init pwsh | Invoke-Expression # 查看…