前言
今年是2021年2月4日,是我们的小年,在这里给大家拜个小年,各位小年快乐!!!在这个举国同庆的日子里我想给大家分享一个学Java必须掌握的、重要的东西——重写
一、在Java中什么是“重写”?
在继承中,子类可以定义和父类相同的名称且参数列表一致(参数列表可以理解成个数相同,类型相同,参数的排列顺序相同)一致的函数,在Java中看是不可思议,但是这是有一个大前提的那就是在继承的这个前提下,说简单通俗一点,重写就是在子类中从新定义父类中已有的方法。
二、关于重写的刚性需求
1、在子类中的重写方法和父类中被重写方法,这两个方法名称还有参数列表(参数列表可以理解成个数相同,类型相同,参数的排列顺序相同)必须相同。
2、子类中重写方法的访问权限必须大于或者等于父类中被重写方法的访问权限,否则编译会报错。(public>protected>default(什么都不写,默认)>private)
3、子类重写方法的返回值类型必须是父类中方法的返回值类型或该类型的子类,不能返回比父类更大的数据类型。
4、子类中重写方法不能比父类中被重写方法产生更多的异常类型。
5、父类的构造函数是不能被子类继承的,因此不能在子类中重写。但是,子类中可以使用**super(叫超类,也叫父类)**关键字访问父类中的构造函数。
三、代码演示
重写方法的调用顺序
子类重写重写后的方法体的第一行默认调用父类重写的方法且子类调用方法时遵循最近原则
1、先创建一个父类,父类中有一个输出内容的方法
代码如下(示例):
public class Father {
// 定义了一个方法,说了一句话
public void sayWord() {
System.out.println("我是Father里的sayWord方法");
}
}
2、再创建一个子类重写父类中的sayWord方法
// 使用extends关键字,让子类Son与父类Father,形成继承关系
public class Son extends Father {
@Override
public void sayWord() {
super.sayWord();//默认调用父类的sayWord方法,可以删除不要
System.out.println("我是Son里的sayWord方法");
}
}
3、测试————>输出
代码如下(测试):
public class Test01 {
public static void main(String[] args) {
Father father = new Father(); // 根据父类Father创建一个father对象
father.sayWord(); // 调用father对象中的sayWord方法
System.out.println("------这是一条华丽的分割线-------");
Son son = new Son(); //根据子类Son创建一个son对象
son.sayWord(); // 调用son对象中重写父类的sayWord方法
}
}
代码如下(输出):
我是Father里的sayWord方法
------这是一条华丽的分割线-------
我是Father里的sayWord方法
我是Son里的sayWord方法
小结
从上面的子类父类中我们都看见他们都有一个sayWord方法,不同的是子类的sayWord方法是从父类中继承过来的,且是被在子类中修改过的,所以在输出的东西不是一样的,而输出结果最后子类中为什么还会有父类中的“我是Father里的sayWord方法”这个是super.sayWord()(默认调用父类的sayWord方法),是可以删除不要的,其实基本这个东西都是需要删除的,这就是一个在子类中调用父类的方法,格式为 super.方法名()
四、方法重写和重载的主要区别(重点!!!!!!)
1、重写特点:函数名必须相同、参数列表必须相同、子类的返回值类型要等于或者小于父类的返回值类型等。子类的作用域不能大于父类中方法的作用域,子类抛出的异常类型不能大于中父类中方法抛出的异常类型。
2、重载的特点:函数名相同,参数列表不同,与访问控制符、返回值类型等无关。
3、重写用于继承关系的父子类中,不能用于同一类中,而重载通常用于同一类中。
4、重写用于更改父类种方法的行为或者实现接口的方法。而重载用于为一个行为提供多种实现方式。
总结
其实这些东西只要写得多了,对于重写和重载的理解自然而然的就慢慢熟了,不需要特别的去死记硬背,最后最后祝大家2021小年快乐,走过的点个赞,博主必回访的呦!!!