继承(使用及深入、super、重写/复写)--学习JavaEE的day14

day14

一、继承

概念

Java中的继承是一个对象获取父对象的所有属性和行为的机制

理解:继承是指一个类(子类)可以继承另一个类(父类)的属性和方法

关键字extends

优点:减少代码的冗余

缺点:继承会增加类与类之间的关系,会增加代码的维护难度

继承的使用

使用场景:多个类似的类,有相同的属性和方法,就可以把相同属性和方法抽取到父类

需求:编写中国人和日本人的类,创建各自的对象

分析:

人类:

属性:姓名、性别、年龄

方法:吃饭饭、睡觉觉

中国人的类 继承 人类 :

属性:身份证

方法:打太极

日本人的类 继承 人类:

属性:年号

方法:拍电影

ps:(省略部分代码)

public class Person {String name;
char sex;
int age;public void eat(){System.out.println(this.name + "吃饭饭");
}public void sleep(){System.out.println(this.name + "睡觉觉");
}}
//            子类           继承        父类
public class Chinese extends Person{String id;public void playTaiJi(){System.out.println("中国人打太极");
}}
	//创建对象Chinese c = new Chinese();//操作父类属性c.name = "奇男子";c.sex = '男';c.age = 22;System.out.println(c.name);System.out.println(c.sex);System.out.println(c.age);//操作子类属性c.id = "1234567890";System.out.println(c.id);//调用父类方法c.eat();c.sleep();//调用子类方法c.playTaiJi();

继承内存图

继承内存图

super

理解:

super表示父类

作用:

1.super.属性:在子类中,调用父类的非私有化的成员属性

2.super.方法:在子类中,调用父类的非私有化的成员方法

3.super():在子类构造方法中的第一句调用父类的非私有化的构造方法

案例:

继承的使用的需求案例

封装父类,添加无参构造、有参构造、get、set方法(都由eclipse直接生成),成员方法保留

经验

私有化属性:eclipse工具栏 ------->Source------->Select getters and setters to create—>勾选需要生成属性的get和set方法;

Source中还有一些自动生成,如构造方法等等;

子类继承父类,封装子类,super使用

public class Chinese extends Person{private String id;public Chinese() {
}public Chinese(String name, char sex, int age, String id) {super(name, sex, age);this.id = id;
}public String getId() {return id;
}public void setId(String id) {this.id = id;
}public void playTaiJi(){System.out.println(super.getName() + "打太极");
}}

测试类,有有参构造直接赋值,不用一个个赋值

	//创建对象Chinese c = new Chinese("奇男子", '男', 22, "1234567890");//调用父类方法c.eat();c.sleep();//调用子类方法c.playTaiJi();
小结

编写一个类的步骤:

1.属性

2.私有化属性

3.无参构造

4.有参构造

5.get/set方法

6.其他的方法

深入继承:

思考题:
  1. 创建子类对象,会不会调用父类构造方法?

  2. 创建子类对象,会不会创建父类对象?
    不会

  3. 创建子类对象,为什么会调用父类构造方法?
    目的是将父类的属性存放在子类对象中(因为会在子类对象中开辟空间,用于存储父类的成员属性)

  4. 创建子类对象,先调用父类构造方法还是子类构造方法?
    先调用子类构造方法

  5. 创建子类对象,先完成父类构造方法还是子类构造方法?
    先完成父类构造方法

  6. 子类可以继承父类私有化的属性和方法吗?

    ​ 可以,但是只能间接调用

  7. 子类对象是否能继承父类所有的属性和方法?

    ​ Java官网上,明确表示子类不能继承父类私有化的属性和方法,这是站在使用的角度

    ​ 实际上,子类能继承父类私有化的属性方法,但是不能直接使用,可以在父类中编写公有方法去调用私有的属性和方法

案例:
public class Father {private String fatherAttr = "父类私有化属性";public Father() {System.out.println("调用父类的构造方法");
}public String getFatherAttr() {return fatherAttr;
}public void setFatherAttr(String fatherAttr) {this.fatherAttr = fatherAttr;
}private void method01(){System.out.println("父类私有化方法");
}public void method02(){method01();
}}
public class Son extends Father{public Son() {//super();//默认实现:调用父类的构造方法System.out.println("调用子类的构造方法");
}}
public class Test01 {public static void main(String[] args) {	Son son = new Son();System.out.println(son.getFatherAttr());son.method02();
}}

重写/复写

含义:

重写也叫做复写,将父类中方法在子类中重新编写一遍

应用场景:

父类方法不满足子类需求时,子类就可以重复父类的方法

条件:

1.在子类中重写父类的方法

2.返回值、方法名、参数列表必须跟父类重写的方法一致

3.访问修饰符不能比父类更严格

需求:

编写中国人和日本人的类,创建各自的对象

public class Chinese extends Person{
//省略一部分//@Override -- 重写的注解
//注解:给程序员和系统解释代码信息
@Override
public void eat(){System.out.println(super.getName() + "吃山珍海味");
}
//在测试类new对象调用输出

总结

1.继承的使用

2.继承的深入 — 重要

3.super

4.重写

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

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

相关文章

[Unity3d] 网络开发基础【个人复习笔记/有不足之处欢迎斧正/侵删】

TCP/IP TCP/IP协议是一 系列规则(协议)的统称,他们定义了消息在网络间进行传输的规则 是供已连接互联网的设备进行通信的通信规则 OSI模型只是一个基本概念,而TCP/IP协议是基于这个概念的具体实现 TCP和UDP协议 TCP:传输控制协议,面向连接&#xff0c…

VsCode配置PCL、Open3D自动补全

写在前面 本文内容 在VsCode上开发PCL、Open3D相关代码,代码自动补全 Open3D、PCL的安装使用见各个版本的Open3D、PCL的编译、使用教程 平台/环境 windows11(windows10): visual studio 2022;cmake 3.22; VsCode 通过cmake构建项目; 转载请…

Excel MATCH函数 两张顺序不同表格,统一排序

目录 一. 背景二. 添加辅助列,使用MATCH函数生成排序条件三. 效果 一. 背景 有如下图所示的两张表格,分别记录着同一批人的1月份和2月份的工资。表格A和表格B中的姓名列相同,工资列数据不同现在要求参考表格A中的姓名列对表格B中的数据进行排序&#xf…

C语言:预处理

C语言:预处理 预定义符号#define定义常量定义宏宏与函数对比 #操作符##操作符条件编译头文件包含库文件包含本地文件包含嵌套文件包含 预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。 __FILE__ //…

多智能体强化学习简介

基础概念 什么是多智能体系统 多智能体系统(Multi-Agent System,MAS)是由多个自主智能体组成的系统。这些智能体可以协同工作,也可以独立行动,以实现各自的目标。在多智能体系统中,每个智能体都有自己的决…

在你的 Vue + Electron 项目里,引入 ESLint

因为我的项目是基于 Electron 平台的 Web 应用,使用 Vue 3 实现,而且用了 TypeScript,所以,在引入 ESLint 的时候,要考虑好几种规范的问题。 文章目录 零、简介1. 规则2. 配置文件3. 共享配置4. 插件5. 解析器6. 自定义…

Vue开发实例(九)动态路由实现左侧菜单导航

之前在【Vue开发实例(六)实现左侧菜单导航】文中实现了菜单的导航,本篇是在那个基础上改造的。 动态路由实现左侧菜单导航 一、动态菜单创建二、根据菜单数据来创建路由三、添加路由已加载标记,省的每次点击菜单都要加载 一、动态…

2021 年 3 月青少年软编等考 C 语言一级真题解析

目录 T1. 字符菱形思路分析 T2. 与圆相关的计算思路分析 T3. 苹果和虫子 2思路分析 T4. 奇数求和思路分析 T5. 药房管理思路分析 T1. 字符菱形 给定一个字符,用它构造一个对角线长 5 5 5 个字符,倾斜放置的菱形。 时间限制:1 s 内存限制&a…

3、云原生安全之falco的部署

文章目录 1、helm安装2、拉去镜像失败与解决3、安装faclo4、安装nfs服务器,配置k8s的持久卷4.1、创建nfs服务器,4.2、部署master节点(nsf服务的客户端)4.3、pv与pvc4.4、假设pv和pvc的配置文件出错了5、安装falcosidekick可视化(建议跳过,直接使用6)6、安装faclo与falco…

【设计模式 01】单例模式

单例模式,是一种创建型设计模式,他的核心思想是保证一个类只有一个实例(即,在整个应用程序中,只存在该类的一个实例对象,而不是创建多个相同类型的对象),并提供一个全局访问点来访问…

java012 - Java集合基础

1、集合基础 1.1 集合概述 引用数据类型包括:类、接口、数组[] 1.2 ArrayList构造和添加方法 代码: 空集合对象:[] add() add(int index,E element): 1.3 ArrayList集合常用方法

计算机体系结构安全:对体系结构如何支持安全机制进行调研

一、体系结构支持信任建立和主动防御的技术: 可信3.0 二、体系结构怎么更好的支持信任建立和主动防御 2.1 支持信任建立 一、以手机芯片举例,用智能手机的芯片作为信任根,确保应用程序和敏感数据受到保护。 二、启动时验证操作系统和应用…

Stable Diffusion 模型分享:Henmix_Real(人像、真实、写真、亚洲面孔)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八下载地址模型介绍 作者述:这个模型试图改

深入理解算法的空间复杂度

算法一&#xff1a;逐步递增型 void Loveyou(int n)//n为问题规模 {int i1;while(i<n){i;printf("I love you %d\n",i);}printf("I love you more than %d\n",n);//5 } int main() {Loveyou(3000);return 0; } 无论问题规模怎么变&#xff0c;算法运行…

Springboot教程(五)——单元测试

idea中一般使用JUnit进行单元测试 基本使用 我们可以在idea的test文件夹下的XXXXApplicationTests内进行单元测试&#xff1a; 可以在Test标注的方法上写测试代码&#xff1a; SpringBootTest class C0101ApplicationTests {Testfun contextLoads() {println("Hello …

基础二分学习笔记

模板 : 个人倾向第一种 ; 整数二分 : 最大化查找 : 可行区域在左侧 : 查找最后一个<q的数的下标 : int find(int q){// 查找最后一个 < q 的下标 int l 0 , r n 1 ;while(l 1 < r){int mid l r >> 1 ;if(a[mid]<q) l mid ;else r mid ;}return…

django settings.py STATICFILES_FINDERS 设置

STATICFILES_FINDERS 定义查找器后端以确保Django能够正确地定位和提供静态文件是很重要的. Django中的STATICFILES FINDERS设置是一个inder后端列表&#xff0c;它知道如何在不同的位置定位静态文件。 它被Django的静态文件处理系统用来在开发和部署过程中查找和收集静态文件…

js json转换成字符串

js中JSON数据转换成字符串&#xff0c;可以使用JSON.stringify()方法。 var obj {name: "张三", age: 18, gender: "男"}; var jsonString JSON.stringify(obj); console.log(jsonString); // 输出 {"name":"张三","age"…

土壤类型数据

国家地球系统科学数据中心

AGM CPLD (AGRV2K )的时钟(外部时钟和片上内部振荡器)

AGM CPLD &#xff08;AGRV2K &#xff09;的时钟(外部时钟和片上内部振荡器) 外部晶振 与 内部振荡器&#xff1a; mcu 和 cpld 联合编程时&#xff0c; 整颗芯片需要一颗外部晶振。 &#xff08;芯片有内部振荡器&#xff0c; 但误差较大&#xff0c; 校准后 5%以内误差&…