layout: post
#标题配置
title: Java继承与方法重写
#时间配置
date: 2021-07-10 12:00:00 +0800
#目录配置
categories: Java
#标签配置
tag: 学习笔记
- content
{:toc}
一.继承(extends)
让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员
1.继承的格式:public class 子类名 extends 父类名()
范例:public class Zi extends Fu()
Fu:是父类,也被称为基类、超类
Zi:是子类,也被称为派生类
2.继承的好处和弊端:
好处:提高了代码的(复用性,维护性),是多态的前提
弊端:降低了代码灵活性,增强了代码的耦合性
3.继承的特点:
Java只支持单继承,不支持多继承,但支持多层继承
不支持多继承是为了避免代码冲突
4.继承的成员变量访问特点:
在子类方法中访问一个变量
1.子类局部范围找
2.子类成员范围找
3.父类成员范围找
注意:如果子父类中,出现了重名的成员变量,通过就近原则,会优先使用子类的
如果一定要使用父类的,可以通过super关键字进行区分
super与this:
super关键字的用法和this关键字用法相似
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象引用)
关键字 访问成员变量 访问成员方法 访问构造方法
this this.成员变量 this.成员方法(…) this(…)
访问本类成员变量 访问本类成员方法 访问本类构造方法
super super.成员变量 super.成员方法(…) super(…)
访问父类成员变量 访问父类成员方法 访问父类构造方法
通过子类对象访问一个方法
1.子类成员范围找
2.父类成员范围找
二.方法重写
方法重写概述:在继承体系中,子类出现了和父类中一模一样的方法声明
方法重写的应用场景:1.当子类需要父类的功能,而功能主体子类有自己特有内容,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容
**方法重写:**在继承体系中,子类出现了和父类一模一样的方法声明(方法名,参数列表,返回值类型)
**方法重载:**在同一个类中,方法名相同,参数列表不同,与返回值无关
1.方法重写注意事项
1.父类中私有方法不能被重写
2.父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须通过非静态方法进行重写。
@Override //检查当前的方法是否是一个正确的重写方法
注意:静态方法不能被重写!如果子类中,也存在一个方法声明一模一样的方法,可以理解为,子类将父类中同名的方法,隐藏了起来,并非是方法重写
子类重写父类方法时,访问权限必须大于等于父类
pulic | protected | default | private | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中 | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |
2.继承中构造方法的访问特点
一.
1.子类在初始化之前,一定要先完成父类的初始化
2.子类在初始化之前,一定要先访问到父类的构造方法,完成父类数据的初始化
3.系统在每一个构造方法中,默认隐藏的一句代码(位于构造方法第一句):super();
注意:如果我们编写的类,没有手动指定父类,系统也会自动继承Object类(Java继承体系中的最顶层父类)
二.如果父类中没有空参构造方法,只有带参构造方法,子类会提示错误
解决方法
1.子类通过super,手动调用父类的带参的构造方法
2.子类通过this去调用本类的其他构造方法,本类其他构造方法再通过super去手动调用父类的带参的构造方法
注意:this(…) super(…)必须放在构造方法的第一行有效语句,并且二者不能共存
总结:1.子类中所有的构造方法,默认都会通过super()访问父类中无参的构造方法
2.每一个子类构造方法的第一条语句默认都是:super();
3.this(…) super(…)必须放在构造方法的第一行有效语句,并且二者不能共存