Java---类的继承

文章目录

    • 1. 理解继承
    • 2. 继承概述
    • 3. 代码块理解
    • 4. 继承的好处与弊端
    • 5. 继承中变量的访问特点
    • 6. super关键字
    • 7. 继承中构造方法访问特点
    • 8. 继承中成员方法访问特点
    • 9. 方法重写
    • 10. 方法重写注意事项
    • 11. Java继承注意事项


1. 理解继承

在这里插入图片描述

在这里插入图片描述

2. 继承概述

 1. 继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

 2. 继承格式:public class 子类名 extends 父类名 {}。例如:public class Zi extends Fu {}

  • Fu:是父类,也被称为基类和超类。
  • Zi:是子类,也被称为派生类。

 3. 继承中子类的特点:(1) 子类可以有父类的内容。 (2) 子类还可以有自己特有的内容。

3. 代码块理解

public class Fu {public void show(){System.out.println("show方法被调用");}
}
public class Zi extends Fu {public void method(){System.out.println("method方法被调用");}
}
public class Demo {public static void main(String[] args) {Fu f=new Fu();f.show();Zi z=new Zi();z.method();z.show();}
}

在这里插入图片描述

4. 继承的好处与弊端

 1. 好处:(1) 提高了代码的复用性(多个类相同的成员可以放到同一个类中)。 (2) 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)。

 2. 弊端:继承让类与类之间产生了关系,类的耦合性增强了,当父类发送变化时,子类实现也不得不跟着变化,削弱了子类的独立性。

 3. 继承的体现关系:is a。即什么是什么的一种,如苹果是水果的一种,猫是动物的一种。

5. 继承中变量的访问特点

 在子类方法中访问一个变量,顺序为:

  • 在子类局部范围找。
  • 在子类成员范围找。
  • 在父类成员范围找。
  • 如果都没有就报错。
public class Fu {public int age=30;
}public class Zi extends Fu {public int height=180;public void  show(){System.out.println(age);System.out.println(height);}
}public class Demo {public static void main(String[] args) {Zi z=new Zi();z.show();  //输出为30、180}
}
public class Fu {public int age=30;
}public class Zi extends Fu {public int height=180;public int age=20;public void  show(){System.out.println(age);System.out.println(height);}
}public class Demo {public static void main(String[] args) {Zi z=new Zi();z.show(); //输出为20、180}
}
public class Fu {public int age=30;
}public class Zi extends Fu {public int height=180;public int age=20;public void  show(){int age=40;System.out.println(age);System.out.println(height);}
}public class Demo {public static void main(String[] args) {Zi z=new Zi();z.show(); //输出为40、180}
}

6. super关键字

关键字访问成员变量访问构造方法访问成员方法
thisthis.成员变量,访问本类成员变量this(…),访问本类构造方法this.成员方法(…),访问本类成员方法
supersuper.成员变量,访问父类成员变量super(…),访问父类构造方法super.成员方法(…),访问父类成员方法
public class Fu {public int age=20;
}public class Zi extends Fu {public int age=30;public void  show(){int age=40;System.out.println(age);       //40System.out.println(this.age);  //30System.out.println(super.age); //20}
}public class Demo {public static void main(String[] args) {Zi z=new Zi();z.show();//输出结果为40、30、20}
}

7. 继承中构造方法访问特点

 1. 子类中所有的构造方法默认都会访问父类中无参的构造方法。

  • 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。
  • 每一个子类构造方法的第一条语句默认都是:super()

 2. 如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?(此时super()不起作用)

  • 通过使用super关键字去显示地调用父类的带参构造方法。
  • 在父类中自己提供一个无参构造方法。
public class Fu {public Fu(){System.out.println("Fu类中无参方法调用");}public Fu(int age){System.out.println("Fu类中带参方法调用");}
}public class Zi extends Fu {public Zi(){System.out.println("Zi类中无参方法调用");}public Zi(int age){System.out.println("Zi类中带参方法调用");}
}public class Demo {public static void main(String[] args) {Zi z1=new Zi();Zi z2=new Zi(20);}
}

在这里插入图片描述

public class Zi extends Fu {public Zi(){//super()super(20);System.out.println("Zi类中无参方法调用");}//super()public Zi(int age){//super()super(20);System.out.println("Zi类中带参方法调用");}
}

在这里插入图片描述

8. 继承中成员方法访问特点

 继承中通过子类访问一个方法,顺序为:

  • 先在子类成员范围找。
  • 再在父类成员范围找。
  • 如果都没有就报错。
public class Fu {public void show(){System.out.println("Fu类中show方法调用");}
}public class Zi extends Fu {public void method() {System.out.println("Zi类中method方法调用");}public void show(){super.show();System.out.println("Zi类中show方法调用");}
}public class Demo {public static void main(String[] args) {Zi z=new Zi();z.method();z.show();}
}

在这里插入图片描述

9. 方法重写

 1. 方法重写概述:子类中出现了和父类中一模一样的方法声明。

 2. 方法重写应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,既沿袭了父类的功能,又定义了子类特有的内容。

 3. @Override:是一个注解,可以帮助我们检查重写方法的方法声明的正确性。

public class Phone {public void call(String name){System.out.println("给"+name+"打电话");}
}public class NewPhone extends Phone{@Overridepublic void call(String name) {System.out.println("先开启视频");super.call(name);}
}public class Demo {public static void main(String[] args) {Phone ph=new Phone();ph.call("张三"); //注意加双引号System.out.println("--------");NewPhone p=new NewPhone();p.call("张三");  //注意加双引号}
}

在这里插入图片描述

10. 方法重写注意事项

 父类中的私有方法不能被重写(父类的私有成员子类是不能继承的)。子类方法的访问权限不能更低(public>默认>私有)。

11. Java继承注意事项

 Java中类只支持单继承,不支持多继承。Java中类支持多层继承。

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

免费好用的api整理合集

免费api接口大全分享~ 二维码生成器:可生成普通二维码、带图片的艺术二维码(黑白与彩色)、动态二维码(黑白与彩色)。 实人认证(人像三要素):输入姓名、身份证号码和一张人脸照片&a…

Java的严格计算部分

注释:在Math类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程。 如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类。 它使用“自由发布的Math库”(fdlibm)实…

客观题测试-第6章图

第1关:图-客观题测试 (一) 1、无向图中一个顶点的度是指图中()。 A、通过该顶点的简单路径数 B、与该顶点相邻接的顶点数 C、与该顶点连通的顶点数 D、通过该顶点的回路数 2、以下说法正确的是(&…

spring boot 2 升级到 spring boot 3 后文件上传失败

背景 项目需要,要求升级 spring boot 2.7 到 spring boot 3.2,升级过程中发现很多不兼容问题,下面说明文件上传失败的解决方案。 问题 spring boot 2 中不需要额外的配置,直接在 Controller 中配置 MultipartFile 接收页面传的…

Linix服务器添加dns解析

Linix开通互联网域名地址出现,如下错误: 需要访问的服务器上添加dns解析 vim /etc/sysconfig/network-scripts/ifcfg-ens192 添加如下配置: DNS1202.96.134.13 重启网卡: systemctl restart network 注意如果是docker服务部署…

利用github copilot完成代码,利用正则化完成字符串中信息查找

利用正则化完成字符串中的字符拆解。 下面的代码是实现在“计算机组成原理-计科2101-123456-小明同学.docx”中提取出班级(grade),学号(id),姓名(name)。以下的代码都是github copi…

vivado时序方法检查2

TIMING-4 &#xff1a; 时钟树上的基准时钟重新定义无效 时钟树上的时钟重新定义无效。基准时钟 <clock_name> 是在时钟 <clock_name> 下游定义的 &#xff0c; 并覆盖其插入延迟和/ 或波形定义。 描述 基准时钟必须在时钟树的源时钟上定义。例如 &#xff0…

企业电子招投标系统源码之电子招投标系统建设的重点和未来趋势

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…

美国DMF号查询方法及网址

美国的DMF制度于1989年开始实施&#xff0c;并一直延续至今。美国DMF制度是首创&#xff0c;欧洲以及其他后续的加拿大、澳大利亚等&#xff0c;都是在仿美国的DMF制度。下面笔者就带大家来了解什么是美国DMF&#xff1f;如何快速查询美国DMF注册备案信息&#xff1f; 关于DMF的…

记录PTA编程题练习7-35 有理数均值——Python3实现

题目描述&#xff1a; 本题要求编写程序&#xff0c;计算N个有理数的平均值。 输入格式&#xff1a; 输入第一行给出正整数N&#xff08;≤100&#xff09;&#xff1b;第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数&#xff0c;其中分子和分母全是整形范围内的整…

Spring-AOP

目录 一、引入AOP 二、核心AOP概念和术语 三、切点表达式 四、Spring实现AOP &#xff08;一&#xff09;AspectJ的支持 1 、基于注解开发 1.1 引入依赖 1.2 实现目标类 1.3 定义切面类&#xff08;日志管理&#xff09; 1.4 将目标类和切面类纳入Spring容器 1.5 开…

JFrog Artifactory—高性能软件制品管理仓库

产品概述 JFrog Artifactory是一个可扩展的通用二进制存储库管理器&#xff0c;可在整个应用程序开发和交付过程中自动管理工件和依赖项。JFrog Artifactory支持大多数开发语言&#xff0c;是整个DevOps流水线中大多数软件包、容器映像和Helm图表的单一数据源。Artifactory对元…

四.多表查询

多表查询 1.一个案例引发的多表连接1.1案例说明1.2 笛卡尔积&#xff08;或交叉连接&#xff09;的理解1.3案例分析与问题解决 2.多表查询分类讲解分类1&#xff1a;等值连接vs非等值连接分类2&#xff1a;自连接vs非自连接分类3&#xff1a;内连接vs外连接 3.SQL99语法实现多表…

RepidJson将内容写入文件简单代码示例

以下是使用RapidJSON将内容写入文件的示例代码&#xff1a; #include <rapidjson/document.h> #include <rapidjson/writer.h> #include <rapidjson/stringbuffer.h> #include <iostream> #include <fstream>using namespace rapidjson;int mai…

C# 方法的递归调用

在C#中&#xff0c;递归调用是指一个方法调用自身的过程。它是一种常用的编程技巧&#xff0c;用于解决可以分解为相似子问题的问题。以下是在C#中使用递归调用的几个要点&#xff1a; 1. 递归方法的定义&#xff1a; 在方法中调用自身来实现递归。通常需要定义基本情况作为递…

TsuKing: Coordinating DNS Resolvers and Queries into Potent DoS Amplifiers

目录 笔记后续的研究方向摘要引言之前的工作。我们的研究贡献 TsuKing: Coordinating DNS Resolvers and Queries into Potent DoS Amplifiers CCS 2023 笔记 本文介绍了一种名为 TsuKing 的新型 DNS 放大攻击。与以前利用单个DNS解析器的攻击不同&#xff0c;TsuKing协调多个…

ES6基础语法

目录 一、解构 数组解构 对象解构 字符串解构 数值解构 布尔值解构 二、箭头函数 和普通函数区别? 三、拓展运算符 ... 一、解构 给右侧值匹配对应的变量 等号两侧模式一定要匹配 数组解构 /*** 解构&#xff1a;从数组或者对象中提取值&#xff0c;给变量进行赋值操作就…

SELinux refpolicy详解(11)

接前一篇文章:SELinux refpolicy详解(10) 三、refpolicy内容详解 上一回讲解完了refpolicy源码根目录下的INSTALL文件。本回继续讲解源码根目录下的其它文件。第四个来讲解refpolicy源码根目录下的Rules.monolithic文件。 4. Rules.monolithic 文件路径:refpolicy源码根…

threejs WebGLRenderer 像素比对画布大小的影响

官方文档 - WebGLRenderer .setPixelRatio ( value : number ) : undefined 设置设备像素比。通常用于避免HiDPI设备上绘图模糊 .setSize ( width : Integer, height : Integer, updateStyle : Boolean ) : undefined 将输出canvas的大小调整为(width, height)并考虑设备像素比…

回溯算法与深度优先遍历-算法

回溯算法与深度优先遍历 以下是维基百科中「回溯算法」和「深度优先遍历」的定义。 回溯法 采用试错的思想&#xff0c;它尝试分步的去解决一个问题。在分步解决问题的过程中&#xff0c;当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候&#xff0c;它将取消上…