再来个小记,Java方法重写(Method Overriding)
方法重写概念
方法重写(Overriding) ,也叫做“方法覆盖”,其实我觉得叫“方法覆盖”应该更容易理解一些。
在父类和子类中,都定义了相同的方法(名称相同、参数相同),子类的新方法将覆盖父类中原方法,这一特性称为方法重写(Overriding)。
菜鸟教程上是这么说的:外壳不变,核心重写!
要点说明
- 父类和子类 (这就说明要在不同的类中
- 方法相同 (方法名称相同,参数也要相同,包括参数数量、参数类型都要相同
举个例子
父类
public class Dog{
public void bark(){
System.out.println("汪汪汪");
}
}
子类
public class Husky extends Dog{
public void bark(){
System.out.println("嗷呜嗷呜");
}
}
测试类
public class OverridingDemo{
public static void main(String [] args){
Husky erha = new Husky();
erha.bark();
}
}
输出结果
嗷呜嗷呜
解释一下:
首先有个狗狗类Dog
,狗狗会叫,所以有个bark()
方法。一般小狗都是“汪汪”的叫,所以这边需要输出的是“汪汪”的叫声。
然后我这边来了个哈士奇类Husky
,哈士奇也是狗狗,它也继承狗狗类Dog
,对应的,哈士奇也会叫,但是哈士奇是怎么叫的?“嗷呜嗷呜”的叫,所以我们这边要重写一下bark()
方法,要让它输出“嗷呜嗷呜”的叫声。
最后我new了一只哈士奇出来。这条哈士奇的叫声是什么呢?当然是“嗷呜嗷呜”的叫啦,所以最后也是输出“嗷呜嗷呜”了。
强调几点
- 父类和子类都必须具有相同的方法名称,相同的返回值类型和相同的参数列表;
- 声明为 final 和 static 的方法不能被重写;
- 构造方法不能被重写;
- 如果不能继承一个类,则不能重写该类的方法;