ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java当中的继承

2021-04-03 23:00:03  阅读:137  来源: 互联网

标签:super Java 构造方法 继承 子类 当中 父类 方法


继承的概述:

继承:让类与类之间产生关系(子父类关系),子类可以直接使用父类中的非私有成员

继承的格式:

public class 类名 extends 父类名
例:public class Zi extends Fu()

结论:

父类当中私有的成员变量,如果提供setXXX/getXXX方法,
子类是可以通过set/get方法访问成员变量的

继承的好处:

提高了代码的复用性,提高了代码的维护性,**让类与类之间产生了关系是多态的前提**

继承的弊端:

继承是侵入性的。
降低了代码的灵活性(继承父类导致子类必须拥有父类非私有的属性和方法,
让子类自由的世界多了一些约束)。
增强了代码的耦合性:代码与代码之间存在关联都可以称之为耦合

继承的应用场景:

当类与类之间,存在相同(共性)的内容,并且产生了is a的关系,
就可以考虑使用继承来优化代码。

继承的特点:

Java只支持单继承,不支持多继承,但支持多层继承。
单继承:一个子类只能有一个父类。
不支持多继承:子类不能同时继承多个父类。
支持多承继承:子类A继承父类B,父类B继承爷爷类C

继承中访问成员变量需注意:

如果子类中,出现了重名的成员变量,则会通过就近原则,会优先使用子类的。
如果一定要使用父类的,可以通过super()关键字来进行区分。

继承成员变量的访问特点:`

super()关键字的用法和this关键字用法相似
this.代表本类对象的引用。
super():代表父类存储空间的标记(可以理解为父类对象的引用)。
this.成员变量:访问本类的成员变量
this.成员方法(...)访问本类的成员方法。
this.(...)访问本类的构造方法
super.成员变量:访问父类的成员变量
super.成员方法(...):访问父类的成员方法
super(...):访问父类的构造方法。

继承中成员方法的共同特点:

子类成员范围中查找,如果找不到才会去父类的成员范围中查找
如果子类方法出现重名的问题,想要调用父类的方法加上(super.方法)即可通过
子类对象访问父类方法。

方法重写概述:

在继承体系当中,子类出现了和父类一摸一样的方法声明(方法名、参数、返回值类型均相同)

方法重写的引用场景:

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

注意:

方法重写;在继承体系中,子类出现了和父类一摸一样的方法声明(方法名、参数、返回值类型)
方法重载:在同一个类中,方法名相同,参数不同,与返回值无关,构成方法的重载

方法重写的注意事项:

1、父类中私有的方法不能被重写
2、父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须
通过非静态方法进行重写
3、静态方法不能够被重写,如果子类中,也存在一个方法声明一摸一样的方法,可以
理解为,子类将父类中同名的方法隐藏了起来,并非方法的重写
4、子类重写父类的方法时,访问权限必须大于或等于父类

权限修饰符:

private(同类中,set/get) < 默认(同类中,子类无关包) 
< protected(同类、同包中的无关包,不同包中的子类) 
< public(任意位置均可访问) 

继承中构造方法的特点:

子类中所有的构造方法默认都会访问父类中无参的构造方法
因为:子类在初始化的时候,有可能会使用到父类当中的数据,如果父类没有初始化
子类将无法使用父类的数据。子类在初始化之前,一定要先完成父类的初始化

初始化:

构造方法的第一条默认的语句都是super()

注意:

如果我们编写的类,没有手动指定父类,系统也会自动继承(Object类)
Java继承体系中最顶层的父类
如果父类没有空参的构造方法,子类可以在super()在括号中添加参数,则会自动去
寻找父类当中的有参构造方法,子类可以编写带参构造方法与父类一致的参数,
在丢给super()就灵活了
   子类通过this去调用本类的其他的构造方法,本类的其他构造方法再通过super()
去手动调用父类的带参构造方法(及其不推荐)
this(...)与super(...)都必须放在构造方法的第一条可执行代码,
所以两者不能够共存。

萌新小白原创,如有不足之处还望各位前辈多多指教,将不胜感激

标签:super,Java,构造方法,继承,子类,当中,父类,方法
来源: https://blog.csdn.net/qq_52496081/article/details/115421656

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有