为什么要重写?
举个栗子:楠楠追星,一开始她追的是邓伦,但是之后她又迷上了胡歌,之后又改成了古天乐,然后陈情令播出后又粉上了肖战和王一博,之后又投向李现的怀抱。那么我们就知道了她粉的明星一直在改变。我们一开始在父类当中写入的代码是:楠楠粉邓伦。然后子类中程序都写好了。但是,楠楠粉的明星人改变了,那么我们是不是就要将用到邓伦的代码全都改了,改成胡歌。如果代码少还行,那么很多呢?更何况楠楠粉的明星还一直在改变。所以,当子类继承父类的eat方法已经不能准确描述子类自身行为特征了。我们要进行一些改变来适应新的要求。这就是重写。
重写是什么?
重写:我们可以理解为重新改写。引申到java中就是:
对父类方法进行改写或改造的现象称为方法重写或方法覆盖。
比如:父亲和儿子一开始都是使用筷子吃饭,可之后儿子去西方留学,很多年过去,儿子已经不再会用筷子吃饭了,他使用刀叉吃饭。我们可以这样写:
新建一个Student类作为子类
`
public class Student extends Father{
public static void main(String[] args) {
Student stu =new Student();
stu.test();
}
}
再建一个Father类作为父类。
public class Father {
public void test () {
System.out.print("使用筷子吃饭。。。。。。。。");
}
}`
输出:
使用筷子吃饭。。。。。。。。
儿子改变后子类改变为:
public class Student extends Father{
public void test () {
System.out.print("使用刀叉吃饭。。。。。。。。");
}
public static void main(String[] args) {
Student stu =new Student();
stu.test();
}
}
结果:
使用刀叉吃饭。。。。。。。。
怎么重写?
重写里的语法、注意事项:
1、如果父类方法被final/static修饰,那么这个方法就不能被子类重写了。
2、我们使用@Override来标注重写后的方法。
3、子类调用父类方法:
(1)如果它在子类中是非静态代码块/非静态方法。使用super关键字调用。
(2)如果它在子类中是 静态代码块/ 静态方法。我们要在子类中创建父类对象进行调用。
4、重写时,方法名要相同,参数列表也要相同。(指的是个数和类型,不考虑变量名相不相同。
参数类型同为String类型,个数都为1,但是变量名一个为a,一个为b。
5.访问权限从大到小排列顺序为:
public<-------------protected<-----------------friendly<-----------------private
重写后的方法的访问权限只能比父类的大或者相同。
6、返回值。
- 如果父类方法返回值为void或基本类型()
则
子类重写后的方法返回值 - 必和父类相同
-
- 如果返回值是引用类型(比如 类 和String)
则
子类重写后的方法返回值- 要么和父类相同
- 要么是父类方法返回值的子类,不能是基本数据类型
7、子类重写后的方法不能加static(即都是非静态的)