[JAVA]继承
目录
1.继承的概念
2.继承的语法
3.父类成员访问
3.1子类中访问父类成员变量
3.2子类中访问父类成员方法
4.super关键字
5.子类构造方法
6.继承方式
7.final关键字和类的关系
面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用。就像是数学中,提取每一个数的公因数一般,把相同的代码提取出来,单独的成为一个类,但同时又可以被别的类使用其中的属性或方法。
1.继承的概念
继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用
Cat和Dog类,既有从父类Animal继承的语句,也含有本身的语句。
class Animal{//父类String name;int age;public void eat(){System.out.println(this.name + " is eating.");}
}class Cat extends Animal{ //Animal的子类public void miaow(){System.out.println("miaomiaomiao~");}
}class Dog extends Animal{ //Animal的子类public void bark(){System.out.println("wangwangwang~");}
}
2.继承的语法
修饰符 class 子类 extends 父类{……}
class Animal{//父类String name;int age;public void eat(){System.out.println(this.name + " is eating.");}
}class Cat extends Animal{//子类public void miaow(){System.out.println("miaomiaomiao~");}
}public class Test {public static void main(String[] args) {Cat cat = new Cat();System.out.println(cat.age);System.out.println(cat.name);}
}
我们可以看到,我们在main方法中,只实例化了cat对象,但是cat本身并没有定义任何成员变量,却发现可以调用成员变量age和name。而我们又使用了继承,由此可知对象cat当中的成员变量肯定来自于其父类Animal,同样的我们也可以同样的访问父类的方法。
通过上面的举例,我们值得注意的是:
- 子类本身要有属于自身的语句,如果和父类相同则没必要创建一个新的类。
- 子类会将父类的成员变量和方法继承到子类当中
3.父类成员访问
3.1子类中访问父类成员变量
我们可以在子类中使用方法来访问父类的成员,使用this会先在子类中寻找成员,如果找不到则会进入父类寻找,所以在子类中this也可以访问父类成员
class Animal{//父类String name;int age;public void eat(){System.out.println(this.name + " is eating.");}
}class Cat extends Animal{ //Animal子类public void setName(String name){this.name = name;}public void miaow(){System.out.println("miaomiaomiao~");}
}
还有另一种情况,就是子类中成员名和父类的相同。
class Animal{//父类String name; //注意1int age;public void eat(){System.out.println(this.name + " is eating.");}
}class Cat extends Animal{ //Animal子类String name; //注意2public void setName(String name){this.name = name;}public void miaow(){System.out.println("miaomiaomiao~");}
}
此处,子类和父类的成员名都相同,那下面的setName方法中访问的是子类的成员还是父类的成员呢??
答案是:子类的。就像是C语言中局部变量和全局变量一样,如果变量名相同,给其赋值局部变量会优先与全局变量(类似就近原则?)在这里也是同样的道理
“成员名相同,访问父类成员变量的方法我们下面会有所提及”
于是,我们总结以下几点:
- 如果访问的成员变量子类中有,优先访问自己的成员变量。
- 如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
- 如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
3.2子类中访问父类成员方法
如果成员方法名不相同的情况:
和访问父类成员变量类似的,先在子类中寻找要访问的成员方法,如果有即可以访问。如果子类没有,下一步是进入到父类寻找要访问的成员方法。父类中访问不到相应的成员方法,则编译器会报错。子类的优先级是大于父类的
成员方法名相同的情况:
class Base{public void methodA(){System.out.println("Base中的方法");}public void methodB(){System.out.println("Base中的方法");}
}class A extends Base{public void methodA(int a){System.out.println("A中的参数为int的methodA方法");}public void methodB(){System.out.println("A中的methodB方法");}
}
public class Test {public static void main(String[] args) {A a = new A();a.methodA();//没有参数,访问的是父类中的methodA方法a.methodA(5);//有参数,访问的是子类中的methodA方法a.methodB();//访问的是子类的方法,不可能访问到父类的方法//因为先在子类中访问再到父类}
}
总结:
- 通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。
- 通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用方法适传递的参数选择合适的方法访问,如果没有则报错;
4.super关键字
Java提供了super关键字,该关键字主要作用:在子类方法中访问父类的成员。
class Base{public void methodA(){System.out.println("Base中的方法");}public void methodB(){System.out.println("Base中的方法");}
}class A extends Base{public void methodA(int a){System.out.println("A中的参数为int的methodA方法");}public void methodB(){System.out.println("A中的methodB方法");super.methodB();//注意此处:用super关键字访问到了父类的成员方法}
}
public class Test {public static void main(String[] args) {A a = new A();a.methodA();//没有参数,访问的是父类中的methodA方法a.methodA(5);//有参数,访问的是子类中的methodA方法a.methodB();//访问的是子类的方法,不可能访问到父类的方法//因为先在子类中访问再到父类}
}

注意事项:
- 只能在非静态方法中使用
- 在子类方法中,访问父类的成员变量和方法
5.子类构造方法
因为父类和子类是继承关系,即子类会继承父类的成员变量除此还有自身额外的成员变量,在构建子类的构造方法的时候要先调用父类的构造方法。
class Base{public Base(){System.out.println("调用了父类的构造方法");}
}class A extends Base{public A(){super();//调用父类的构造方法 用户没有写的时候会默认自动添加System.out.println("调用了子类的构造方法");}}public class Test {public static void main(String[] args) {A a = new A();}
}

注意:
- 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法
- 如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。
- 在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。
- super(...)只能在子类构造方法中出现一次,并且不能和this同时出现
6.继承方式
java中的继承方式分为3种:
第一种:单继承
即一个类被另一个类继承
class A{……
}class B extends A{……
}
第二种:多层继承
即有一个类A,类B继承了A,类C继承了B
class A{……
}class B extends A{……
}class C extends B{……
}
第三种:不同类继承同一个类
即有一个类A,类B继承A,类C继承A
class A{……
}class B extends A{……
}class C extends A{……
}
7.final关键字和类的关系
当final修饰一个类的时候,这个被修饰的类不能被继承

编译器会报错
相关文章:
[JAVA]继承
目录 1.继承的概念 2.继承的语法 3.父类成员访问 3.1子类中访问父类成员变量 3.2子类中访问父类成员方法 4.super关键字 5.子类构造方法 6.继承方式 7.final关键字和类的关系 面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复…...
Vue3 pinia持久化存储(组合式Api案例演示)
pinia-plugin-persist( pinia持久化插件) 本文采用的是 组合式Api的方式来做Pinia的持久化存储演示 如果对pinia的持久化还是不是很了解的👨🎓|👩🎓,可以看一下笔者的上一篇文章…...
8个你一看就觉得很棒的Vue开发技巧
1.路由参数解耦 通常在组件中使用路由参数,大多数人会做以下事情。 export default {methods: {getParamsId() {return this.$route.params.id}} }在组件中使用 $route 会导致与其相应路由的高度耦合,通过将其限制为某些 URL 来限制组件的灵活性。 正…...
vue3+ts 开发效率提升
1、vite pnpm项目初始化 pnpm: 比npm或yarn快10倍 pnpm与其他包管理器(如npm和Yarn)的不同之处在于它使用一种称为“硬链接”的独特安装方法。当你使用PNPM安装一个包时,它并不会将包的文件复制到每个项目的node_modules目录中&a…...
【数据结构与算法】队列和栈的相互实现以及循环队列
目录🌔一.用队列实现栈🌙1.题目描述🌙2.思路分析🌙3.代码实现⛈二.用栈实现队列☔1.题目描述☔2.思路分析☔3.代码实现🌈三.实现循环队列🌔一.用队列实现栈 🌙1.题目描述 我们先看一下题目链接…...
mysql连接不上问题解决
公司新搭内网测试环境,mysql远程登录问题解决 远程登录: 1 修改host, mysql> select user,host,plugin from user; ---------------------------------------------------- | user | host | plugin | ------------------------…...
利用nginx实现动静分离的负载均衡集群实战
前言 大家好,我是沐风晓月,今天我们利用nginx来作为负载,实现两台apache服务器的动静分离集群实战; 本文收录于沐风晓月的专栏《linux基本功-系统服务实战》,更多内容可以关注我的博客: https://blog.csd…...
与chatGPT神聊,引领你深入浅出系统调用
在操作系统的教学中,系统调用的作用不言而喻,但是,对系统调用常常是雾里看花,似乎明白,又难以真正的触及,即使在代码中调用了系统调用,比如调用fork()创建进程࿰…...
自学大数据第十天~Hbase
随着数据量的增多,数据的类型也不像原来那样都是结构化数据,还有非结构化数据; Hbase时google 的bigtable的开源实现, BigtableHbase文件存储系统GFSHDFS海量数据处理MRMR协同管理服务chubbyzookeeper虽然有了HDFS和MR,但是对于数据的实时处理是比较困难的,没有办法应对数据的…...
vue更高效的工具-vite
目录 1.webpack 2.vite是什么 3.使用vite创建项目 4.最后总结 🐼webpack 简单来说,Webpack是一个打包工具。 站在2018年的角度,成为一个优秀的前端工程师,除了要会写页面样式和动态效果之外,还需要会用主流的单页…...
HFish蜜罐的介绍和简单测试(一)
目录 0、什么是蜜罐 0.1、蜜罐的定义 0.2、蜜罐的优势 0.3、蜜罐与情报 1、HFish介绍 1.1、设计理念 1.2、HFish架构 1.3、HFish特点 1.4、常见蜜罐场景 2、快速部署 2.1、环境要求 2.2、联网环境,一键安装 2.3、安装效果 3、错误排查 3.1、管理端问题…...
2023面试题汇总二
一、CSS面试题 1. 清除浮动的方式有哪些? 为什么要清除浮动?因为浮动的盒子脱离标准流,如果父盒子没有设置高度的话,下面的盒子就会撑上来。 额外标签法(在最后一个浮动标签后,新加一个标签,给其设置cle…...
C# 支付宝接口在线收款退款
收款 在C#中使用支付宝在线支付功能,需要使用支付宝开放平台提供的SDK(软件开发工具包),通过SDK中提供的API(应用程序接口)实现在线支付功能。 以下是使用C#实现支付宝在线支付的大致步骤: 获…...
python例程:《企业编码生成系统》程序
目录《企业编码生成系统》程序使用说明主要代码演示源码及说明文档下载路径《企业编码生成系统》程序使用说明 在PyCharm中运行《企业编码生成系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,只需…...
基于EB工具的TC3xx_MCAL配置开发04_ADC模块软件触发Demo配置
目录 1.概述2. EB配置2.1 添加HwUnit2.2 AdcPrescale配置2.3 添加ADC通道2.4 添加Adc Group2.5 Adc Group配置2.5.1 AdcGroup->General2.5.2 AdcGroup->AdcNotification2.5.3 AdcGroup->AdcGroupDefinition2.5.4 AdcGroup->AdcResRegDefinition2.6 中断配置1.概述 …...
内存操作函数
前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨未来…...
免费搭建个人博客
免费搭建个人博客,并发布到公网 利用hexo搭建个人博客,通过gitee的pages发布到公网 1 前置准备 安装git、安装node.js(尽量选择长期支持的版本) node.js官网:https://nodejs.org/en/ git官网:https://git-scm.com/book/zh/v2 安装…...
【Vue全家桶】详解Vue Router(一)
【Vue全家桶】Vue Router详解(一) Vue系列文章目录: 内容参考链接Vue(一)【Vue全家桶】邂逅Vue、Vue的多种引入方式Vue(二)【Vue全家桶】声明式编程、MVVMVue(三)【Vue…...
9大 HIVE SQL 最频繁被问到的面试题
SQL是用于数据分析和数据处理的最重要的编程语言之一,因此与数据科学相关的工作(例如数据分析师、数据科学家和数据工程师)在面试时总会问到关于 SQL 的问题。 SQL面试问题旨在评估应聘者的技术和解决问题的能力。因此对于应聘者来说&#x…...
学大数据算跟风吗?
随着互联网、物联网和人工智能等技术的不断发展,大数据技术逐渐进入人们的视野,成为一个备受关注的热点话题。那么,大数据专业好学吗?前景如何?下面我们来一起探讨一下。 一、大数据专业的学习难度 大数据技术是一种综…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
