意义
为什么要进行方法覆写?
1.父类中有一个walk方法,每个子类都应该有
new Person().move();
new Snak().move();
2.实际情况
不同的子类对于同一个移动的方法,表现形式不一样
补充:子类的动态描述父类的动态描述不一致
3.怎么办
把父类的方法拷贝到子类中,修改方法体,功能重新实现【覆盖,覆写Override】
直白点说就一句话:因为父类实现的方法,不满足子类的需求,所以需要重新写功能代码
语法
-
明确为什么需要复写:当父类的方法不满足子类的需求的时候,需要覆写
-
基本语法:直接将父类中需要覆写的方法复制放入子类,修改方法体
-
子类方法是否在覆写父类的方法,可以通过注解@Override验证
(1) 是覆写:编译通过
(2) 不是覆写:编译报错
- 注解理解
-
注解:跟注释很类似
-
注释:给程序员看的
-
注解:给java程序看的
细节
方法覆写的细节:
1.保证子类方法和父类方法的包括(方法签名)都要一致;
2.方法访问权限:子类方法的访问权限(修饰符)不能够比父类方法的访问权限更低
private < 默认不写的 <protected <public
3.如果父类中存在static修饰的方法,是不能被子类覆写的
4.返回值类型:
[子类方法的返回值类型]
可以是
[父类方法的返回值类型]
的子类或者相等
5.方法主体:
方法覆写的时候子类方法可以和父类方法写的一样,但是这样就毫无意义了
Demo
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("会沉寂吗");
}
}