Java学习笔记------继承

 继承

Java中提供了一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立继承关系

如图,Student和Teacher类中除了study()和teacher()两个成员函数不同,其他重复了,如果直接写的话,代码量会更多,我们现在可以构建一个Person类,包括重复的内容

格式为:public class Student extends Person{}

 Student称为子类(派生类),Person称为父类(基类或超类)。

继承好处:可以把多个子类中的重复代码抽取到父类中,提高代码复用性

子类可以在父类的基础上,增加其他功能,使子类更强大

设计继承结构

当类和类之间,存在相同的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码

继承的特点

Java只支持单继承,不支持多继承,但支持多层继承

多层继承:子类A继承父类B,父类B可以继承父类C

 子类继承内容

子类不会继承父类构造方法

例如:

public class test{public static void main(String[] args){Zi z=new Zi();Zi z=new Zi("zhangsan",23);   }  
}
class Fu{String name;int age;public Fu(){}public Fu(String name,int age){this.name=name;this.age=age;}}
class Zi extends Fu{
}

以上代码中子类不会继承父类构造方法,所以 Zi z=new Zi("zhangsan",23)实现不了

但是Zi z=new Zi()能实现,因为Java默认给子类写了一个空参构造

子类会继承父类成员变量,private不能使用

public class test{public static void main(String[] args){Zi z=new Zi();z.age=30;   }  
}
class Fu{String name;private int age;}}
class Zi extends Fu{
}

age是私有的,改不了

成员方法是否被继承

虚方法表可以(非private、非static、非final),其他不能

 继承中成员变量的访问特点

就近原则:谁近用谁

class Fu{String name="Fu";}}
class Zi extends Fu{String name="Zi";public void ziShow(){String name="ziShow";System.out.println(name);}
}

会打印ziShow

class Fu{String name="Fu";}}
class Zi extends Fu{String name="Zi";public void ziShow(){String name="ziShow";System.out.println(name);System.out.println(this.name);System.out.println(super.name);}}

this是本类,打印Zi

super表示父类,打印Fu

继承中成员方法的访问特点

就近原则:先查看本类,有调用本类,无调用继承下来的

super直接调用父类中的

方法重写

当父类方法不能满足子类现在的需求,需要进行方法重写

书写格式:在继承体系中,子类出现了和父类中一模一样的方法声明

@Override是放在重写后的方法上,校验子类重写时语法是否正确

@Override
public void ziShow(){}

重写即子类覆盖从父类继承的方法

重写方法名称、形参列表必须与父类中的一致,子类的访问权限必须大于等于父类

私有方法和静态方法不能被重写

继承中的构造方法的访问特点

父类构造方法不会被子类继承

子类中所有构造方法默认先访问父类中的无参构造,在执行自己

子类构造方法第一行语句默认是super(),

如果想调用父类有参构造,必须手动写super进行调用

例如:

public Student(String name,int age){super(name,age);
}

以上代码写在子类里面,调用父类的有参构造

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

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

相关文章

【摸鱼日常】使用Docker部署2048小游戏

一、本次实践介绍 ​1. 本次实践简介 本次实践部署环境为个人测试环境,快速使用docker部署2048小游戏。 rootWellDone:/home/goodjob# uname -aLinux WellDone 6.5.0-14-generic #14~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 20 18:15:30 UTC 2 x86_64 x86_64…

@ 代码随想录算法训练营第4周(C语言)|Day21(二叉树)

代码随想录算法训练营第4周(C语言)|Day21(二叉树) Day21、二叉树(包含题目 ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先 ) 530.二叉搜索树的最小绝对差 题目…

Kotlin基础——DSL

DSL(领域特定语言) 常见的DSL就是SQL和正则表达式,用于操作数据库和文本字符串,Kotlin DSL通常为嵌套的Lambda表达式或链式方法,如 https://github.com/gradle/gradle-script-kotlin 用于构建Gradle脚本https://gith…

【深度学习笔记】3_2线性回归的从零实现

注:本文为《动手学深度学习》开源内容,仅为个人学习记录,无抄袭搬运意图 3.2 线性回归的从零开始实现 在了解了线性回归的背景知识之后,现在我们可以动手实现它了。尽管强大的深度学习框架可以减少大量重复性工作,但若…

【C++精简版回顾】12.友元函数

1.友元函数 1.class class MM { public:MM(int age,string name):age(age),name(name){}friend void print(MM mm); private:int age;string name;void print() {cout << age << "岁的" << name << "喜欢你" << endl;} }; f…

Flutter(一):安装和环境配置、创建Flutter项目

安装和环境配置、创建Flutter项目 Flutter 下载方式1方式2 Flutter 环境配置配置国内镜像站点解压 Flutter将 flutter 添加到系统环境变量中运行 flutter doctor来验证安装 Android Studio下载插件创建项目安装 Android SDK 工具在模拟器上运行 Flutter 下载 方式1 全版本&…

Java基于微信小程序的校园二手物品交易系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

计网:动手尝试SMTP交互【利用Telnet发送邮件, 带图片】

文章目录 准备工作发送仅有ascii码的邮件发送图片附件后记 准备工作 1.如图&#xff0c;勾选telnet客户端 2.邮箱开启第三方登录服务 开启服务后&#xff0c;会给一个授权码。授权码是QQ邮箱用于登录第三方客户端/服务的专用密码&#xff0c;适用于登录以下服务&#xff1a;…

leetcode-字符串中的第一个唯一字符

387. 字符串中的第一个唯一字符 题解&#xff1a; 首先&#xff0c;我们需要遍历字符串s&#xff0c;统计每个字符出现的次数。然后&#xff0c;我们再次遍历字符串s&#xff0c;找到第一个只出现一次的字符&#xff0c;返回它的索引。如果遍历完字符串s都没有找到只出现一次…

React组件详解

React组件分为两大类 1.函数组件 2.类组件&#xff08;最常用&#xff09; 组件化 import ReactDom from "react-dom";// // 1.通过函数创建一个组件 // 2.函数名字必须大写开头 // 3.函数必须有返回值 function Func1() {return <h2>这是一个基础组件</h…

c语言经典测试题5

1.题1 t0; while(printf("*")) { t; if (t<3) break; }关于上述代码描述正确的是&#xff1f; A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与0等价 C: 其中循环控制表达式是不合法的 D: 以上说法都不对 我们来分析一下&#xff1a;printf的返回值…

你真的了解@Async吗?

你真的了解Async吗&#xff1f; 使用场景&#xff1a; 开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑&#xff0c;比如消息推送、商品同步等都可以使用异步方法&#xff0c;这时我们可以用到Async。但是直接使用 Async 会有风险&#xff0c;当我们没有指定线程池…

数学建模资料分享

1. 往年各赛题的优秀论文 可以用来参考一下论文是怎么写的。参考论文的结构&#xff0c;格式&#xff0c;思路等等。 链接&#xff1a;https://pan.baidu.com/s/1WG2t4-x9MjtaSgkq4ue5AQ?pwdnlzx 提取码&#xff1a;nlzx --来自百度网盘超级会员V4的分享 2.论文模板 链接&a…

代码随想录算法训练营Day41 | 0-1背包理论基础、416.分割等和子集

0-1背包理论基础 基础 DP数组与其下标的含义 dp[i][j]&#xff0c;i为物品编号&#xff0c;j为背包容量 dp[i][j]表示从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大是多少。 递推公式 分类&#xff1a;是否要放入下标为i的物品&…

typescript 实现Optional

我们先看下面的这段代码,一个学生接口,里面有成员id,name,age,gender等等成员, 有一个方法graduate,里面要接受一个Student类型的实参 interface Student {id: numbername: stringage: numbergender: string}function graduate(Student: Student) {//...}现在有一个问题,就是学…

LabVIEW燃料电池船舶电力推进监控系统

LabVIEW燃料电池船舶电力推进监控系统 随着全球经济一体化的推进&#xff0c;航运业的发展显得尤为重要&#xff0c;大约80%的世界贸易依靠海上运输实现。传统的船舶推进系统主要依赖于柴油机&#xff0c;这不仅耗能高&#xff0c;而且排放严重&#xff0c;对资源和环境的影响…

vue导致页面加载白屏时间长的原因有哪些,怎么优化

写在前面&#xff1a;vue是单页面应用&#xff0c;默认index.html里只要一个空的div。需要将所有的资源都下载到浏览器端进行解析。当网速较差时会出现一定程度的白屏。 什么是白屏时间 白屏时间是指用户输入内容回车到浏览器开始出现第一个字符,也就是说(页面)开始显示内容的时…

2583. 二叉树中的第 K 大层和

2583. 二叉树中的第 K 大层和 题目链接&#xff1a;2583. 二叉树中的第 K 大层和 代码如下&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), …

【笔记】【电子科大 离散数学】 2.命题

文章目录 数理逻辑定义 命题定义不是命题的例子 原子命题和复合命题定义约定 命题联结词否定联结词定义例子真值表 合取联结词定义例子真值表 析取联结词定义例子 蕴含联结词定义例子真值表 等价联结词定义例子真值表 命题符号化及其应用速查表格优先级复合命题符号化布尔检索演…

15.4K Star,超强在线编辑器

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 今天推荐一款非常棒的开源实时协作编辑器&#xff0c;可用于多人同时编…