Java面向对象之方法重写(覆写)

意义

为什么要进行方法覆写?

1.父类中有一个walk方法,每个子类都应该有

new Person().move();

new Snak().move();

2.实际情况

不同的子类对于同一个移动的方法,表现形式不一样

补充:子类的动态描述父类的动态描述不一致

3.怎么办

把父类的方法拷贝到子类中,修改方法体,功能重新实现【覆盖,覆写Override】

直白点说就一句话:因为父类实现的方法,不满足子类的需求,所以需要重新写功能代码

语法

  1. 明确为什么需要复写:当父类的方法不满足子类的需求的时候,需要覆写

  2. 基本语法:直接将父类中需要覆写的方法复制放入子类,修改方法体

  3. 子类方法是否在覆写父类的方法,可以通过注解@Override验证

(1) 是覆写:编译通过

(2) 不是覆写:编译报错

  1. 注解理解

1) 注解:跟注释很类似

2) 注释:给程序员看的

3) 注解:给java程序看的

细节

方法覆写的细节:

1.保证子类方法和父类方法的包括(方法签名)都要一致;

​ 2.方法访问权限:子类方法的访问权限(修饰符)不能够比父类方法的访问权限更低

​ private < 默认不写的 <protected <public

​ 3.如果父类中存在static修饰的方法,是不能被子类覆写的

​ 4.返回值类型:

​ [子类方法的返回值类型]

​ 可以是

​ [父类方法的返回值类型]

​ 的子类或者相等

​ 5.方法主体:

​ 方法覆写的时候子类方法可以和父类方法写的一样,但是这样就毫无意义了

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class _05Override {
public static void main(String[] args) {
Son son = new Son(); //实例化对象
son.speak(); //调用son对象覆写后的speak方法
A a = new A();
a.speak(); //调用a对象覆写后的方法
}
}
class Test{
String name;
void speak(){ //定义返回值为Test的方法
System.out.println("直到大厦崩塌");
}
}
class Son extends Test{ //继承Test方法
@Override //注解
void speak(){ //覆写方法
System.out.println("还会远吗");
}
}
class A extends Test{ //继承Test方法
@Override
void speak(){ //覆写父类方法
System.out.println("会沉寂吗");
}
}
❤赏点钱让我买杯快乐水8❤