Skip to main content

moregeek program

一文带你吃透java中的继承_mb6353c9b8a50b6的博客-多极客编程

继承


继承的概念



面向对象的三大特征:封装性、继承性、多态性。
继承是多态的前提,如果没有继承,就没有多态。




继承关系当中的特点:
1.子类可以拥有父类的“内容”。
2.子类还可以拥有自己的专有内容。




父类也可以叫基类、超类 。
子类也可以叫派生类。



继承的格式



在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当做父类看待。



定义父类的格式:(一个普通的类定义) 
public class 父类名称{
//...
}

定义子类的格式:
public class 子类名称 extends父类名称{
//...
}

举例配合理解:
在这里插入图片描述
在这里插入图片描述


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



在父子类的继承关系当中,如果成员变量重名,则创建子类对象时,访问有两种方式:
直接通过子类对象访问成员变量:
等号左边是谁,就优先用谁,没有则向上找。
间接通过成员方法访问成员变量:
该方法属于谁,就优先用谁,没有则向上找。




等号左边是谁,就优先用谁,没有则向上找意思是:如果父类和子类当中都有一个相同的变量名,如果你创建一个对象调用这个对象,如果你创建的是父类对象,用父类对象调用这个变量,用的就是父类的这个变量,反之用的是子类当中的变量。



举例配合理解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


区分子类方法中重名的三种变量



局部变量: 直接写成员变量名

本类的成员变量: this.成员变量名
父类的成员变量: super.成员变量名



举例:


public class Fu {
int num = 10 ;
}

public class Zi extends Fu{
int num = 20 ;

public void method(){
int num =30 ;
System.out.println(num); //30 局部变量
System.out.println(this.num); //20, 本类的成员变量
System.out.println(super.num); //10,父类的成员变量
}
}

成员方法访问特点



在父子类的继承关系当中,创建子类对象,访问成员方法的规则: 创建的对象是谁,就优先用谁,如果没有则向上找。
注意事项:无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类的。




看new的是谁,就优先用谁,没有则向上找。
口诀:编译看左边,运行看右边。
对比一下:
成员变量:编译看左边,运行还看左边。
成员方法:编译看左边,运行看右边。
和继承中访问特点一样




编译看左边:等号左边是谁就用谁;例如是 Fu,那么就去 Fu里面找这个方法(变量),如果找到,编译通过,不会报错。"


运行看右边:编译通过后,运行看右边new的谁就用谁,例如:new Zi,那么就去Zi里面找这个方法,如果有就用,没有则向上找。"


运行还看左边:编译通过后,运行看左边,笔号左边是谁就用谁,
例如:Zi aa=new Zi, 那么就去Zi里面找这个方法,如果有就用,没有则向上找。



举例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


方法的覆盖重写



重写(Override) 概念:在继承关系当中,方法的名称一样,参数列表也一样。
重写(Override):方法的名称一样,参数列表【也一样】。覆盖、覆写。
重载(Overload):方法的名称一样,参数列表【不一样】。
方法的覆盖重写特点:创建的是子类对象,则优先用子类方法。




方法覆盖重写的注意事项:
1.必须保证父子类之间方法的名称相同,参数列表也相同。
Override:写在方法前面,用来检测是不是有效的正确覆盖重写。这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。
2、子类方法的返回值必须【小于等于】父类方法的返回值范围。
小扩展提示:iava.lang.Object类是所有类的公共最高父类(祖宗类),iava.lang.String就是Object的子类。
3、子类方法的权限飞须【大干等于】父类方法的权限修饰符。
小扩展提示:public>protected>(default)>private
备注:(default)不是关键字default,而是什么都不写,留空。



构造方法的访问特点



继承关系中,父子类构造方法的访问特点:
1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造。
2.子类构造可以通过super关键字来调用父类重载构造。
3.super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造。




总结: 子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个语句。



super关键字的三种用法



super天键子的用法有三种:
1.在子类的成员方法中,访问父类的成员变量。
2.在子类的成员方法中,访问父类的成员方法。
3.在子类的构造方法中,访问父类的构造方法。



举例配合理解:
在这里插入图片描述
在这里插入图片描述


this关键字的三种用法



super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种:
1.在本类的成员方法中,访问本类的成员变量。
2.在本类的成员方法中,访问本类的另一个成员方法。
3.在本类的构造方法中,访问本类的另一个构造方法。
在第三种用法当中要注意:
A.this(...)调用也必须是构造方法的第一个语句,唯一一个。
B.super和this两种构造调用,不能同时使用。



举例配合理解:
在这里插入图片描述


在这里插入图片描述


Java继承的三个特点



1.java语言是单继承的,一个类的直接父类只能有唯一一个。
2.java语言可以多级继承,例如:我有一个父亲,我父亲还有一个父亲,也就是爷爷。
3.一个子类的直接父亲是唯一的,但是一个父亲可以拥有很多子类,例如:一个父亲有很多个子女。



发红包案例



群主发普通红包。某群有多名成员,群主给成员发普通红包,普通红包的规则:
1.群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
2.成员领取红包后,保存到成员余额中。 请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作



分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


©著作权归作者所有:来自51CTO博客作者mb6353c9b8a50b6的原创作品,请联系作者获取转载授权,否则将追究法律责任

apache solr 的 spring data (数据)_spring认证的博客-多极客编程

版本 4.3.15Spring Data for Apache Solr项目通过使用Apache Solr搜索引擎将Spring的核心概念应用于解决方案的开发。我们提供了一个“模板”作为存储和查询文档的高级抽象。您可能会注意到与Spring Framework中的MongoDB支持相似之处。项目元数据版本控制:https://github.com/spring-projects/spring-da

spring data(数据) couchbase_spring认证的博客-多极客编程

版本 5.0.0本参考文档描述了 Spring Data Couchbase 库的一般用法。项目信息版本控制 -https://github.com/spring-projects/spring-data-couchbase错误跟踪器 -https://jira.springsource.org/browse/DATACOUCH发布存储库 -https://repo.spring.io/libs-

【算法】最后一个单词的长度,颠倒二进制位,排列序列等三道题目_小冷的博客-多极客编程

颠倒二进制位题目描述 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用二进制补码(https://baike.baidu.com/item/二进制补码/529528

谈云服务,那不得不谈这个技术_周杰伦本人的博客-多极客编程

谈云服务,那不得不谈这个技术 坚持原创,写好每一篇文章 上篇文章我们说到docker的出现让容器即服务变成了可能并日趋流行,然而docker部署的服务越来越多以后,容器的管理就成为了问题,kubernetes就是用来解决这个问题的。如果没有kubernetes,我相信,容器肯定混乱不堪,并且难以维护。kubernetes可以实现容器的自动部署,自动扩缩容和管理容器。所以如果要谈云服务的,kub

entityutils mapstruct beancopier 数据实体类转换工具 do bo vo dto 附视频_赛先生和泰先生的博客-多极客编程

一、序言 在实际项目开发过程中,总有数据实体类互相转换的需求,DO、BO、VO、DTO等数据模型转换经常发生。今天推荐几个好用的实体类转换工具,分别是EntityUtils MapStruct BeanCopier ,并且给出使用的案例。需要说明的是,本文有配套视频讲解。 下面分别讲解这3种工具的使用。 二、实战编码 (一)EntityUtils 1、引入依赖 学习工具包源代码的朋友,请看这里。

聊一聊装饰者模式_知了一笑的博客-多极客编程

是你,还是你,一切都有你!—— 装饰者模式 一、概述 装饰者模式(Decorator Pattern)允许向一个现有的对象扩展新的功能,同时不改变其结构。主要解决直接继承下因功能的不断横向扩展导致子类膨胀的问题,无需考虑子类的维护。 装饰者模式有4种角色: 抽象构件角色(Component):具体构件类和抽象装饰者类的共同父类。 具体构件角色(ConcreteComponent):抽象构件的

apache solr 的 spring data (数据)_spring认证的博客-多极客编程

版本 4.3.15Spring Data for Apache Solr项目通过使用Apache Solr搜索引擎将Spring的核心概念应用于解决方案的开发。我们提供了一个“模板”作为存储和查询文档的高级抽象。您可能会注意到与Spring Framework中的MongoDB支持相似之处。项目元数据版本控制:https://github.com/spring-projects/spring-da

spring data(数据) couchbase_spring认证的博客-多极客编程

版本 5.0.0本参考文档描述了 Spring Data Couchbase 库的一般用法。项目信息版本控制 -https://github.com/spring-projects/spring-data-couchbase错误跟踪器 -https://jira.springsource.org/browse/DATACOUCH发布存储库 -https://repo.spring.io/libs-

【算法】最后一个单词的长度,颠倒二进制位,排列序列等三道题目_小冷的博客-多极客编程

颠倒二进制位题目描述 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用二进制补码(https://baike.baidu.com/item/二进制补码/529528

谈云服务,那不得不谈这个技术_周杰伦本人的博客-多极客编程

谈云服务,那不得不谈这个技术 坚持原创,写好每一篇文章 上篇文章我们说到docker的出现让容器即服务变成了可能并日趋流行,然而docker部署的服务越来越多以后,容器的管理就成为了问题,kubernetes就是用来解决这个问题的。如果没有kubernetes,我相信,容器肯定混乱不堪,并且难以维护。kubernetes可以实现容器的自动部署,自动扩缩容和管理容器。所以如果要谈云服务的,kub

harmonyos arkts 本地库&三方库的用法_鸿蒙社区的博客-多极客编程

项目介绍 项目内容: 自定义基础组件和容器组件、依赖库概念、本地依赖库的创建和引用、三方库的引用。 工具版本: DevEco Studio 3.1 Canary1 SDK版本: 3.2.1.4(API Version 9 Canary1)(Stage模型) 本项目基于HarmonyOS的ArkUI框架TS扩展的声明式开发范式,关于语法和概念直接看官网官方文档地址:基于TS扩展的声明式开发范式, 效

[oeasy]python0019_ 打包和解包_struct_pack_unpack_overmind1980的博客-多极客编程

打包和解包回忆上次内容ASCII 由这样几类字符构成英文大写字符英文小写字符数字符号电报时代对于英文、数字的编码使用的是摩斯电码这摩斯电码是3进制的编码方式 长短空怎么演化成ascii这种0101的二进制编码的呢?🤔回到 ASCII 码电报传过来的信号需要记录下来 于是有了电传打字机(tele-typewriter)电传打字机需要统一的编码字母和数字ASCII的第一个商业用途 是作为一个七位电传打