Java || 重写和@Override

2022-08-21 09:17:26

1 java中的重写

1.1 概述

当子类需要父类的功能,而子类有新的内容,就可以重写父类中的方法。
实际开发中,代码量的逐渐增加,维护成了很大的问题,如果需要对某个方法进行修改,其代码本身、父类、子类的功能都会受到影响。重写则很好的解决了这个问题。

【重写的特点】

  1. 在子类和父类中,出现了方法声明相同的情况
  2. 子类要重写的函数,权限修饰符不能比父类的低(punlic < protected < default < private)
  3. 父类的私有的方法,子类不能进行重写

【重写和重载的区别】

  1. 重写:子类和父类中的方法相同,其函数名、参数列表、返回值类型 都相同。
  2. 重载:指在同一个类中,多个函数名相同,但他们的参数列表(个数、数据类型)不同。

1.2 代码实例

先创建Person.java

package Rewrite;publicclassPerson{publicvoidwalk(){
       System.out.println("走路!");}publicvoidrun(){
       System.out.println("跑步!");}publicvoidwork(){        
       System.out.println("工作!");}}


再创建Son.java子类。Son子类继承Person父类,并对父类的work()方法进行重写

package Rewrite;publicclassStudentextendsPerson{publicvoidwork(){super.work();//使用super关键字调用父类方法
       System.out.println("学习!"); 
       System.out.println("娱乐!");}}


Main.java中调用

package Rewrite;publicclassMain{publicstaticvoidmain(String[] args){
       Person per=newPerson();//创建父类对象
       per.eat();        
       per.work();        
       per.sleep();        
       Son stu=newSon();//创建子类对象
       stu.work();}}

2 java中的@Override的含义

@Override是伪代码,表示重写(可写可不写)

【好处】

  1. 可以当注释使用,方便阅读;
  2. 编译器可以进行验证@Override下面的方法名是否是父类中所存在的函数,如果没有则会报错。
    例如,父类里面的函数为run(),在子类里面没有写@Override,然后又把函数写成了run1(),这时编译器是可以编译通过的,因为编译器会认为这个方法是自己的子类中增加的方法,这样就没有达到重写的意义

【举例】
在重写父类的onCreate 时,在方法前面加上@Override,系统可以帮助检测方法的正确性。

@OverridepublicvoidonCreate(Bundle savedInstanceState){
   ……}

这种方式是正确的。当写成如下的话,编译器就会报错The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method,来保证正确重写onCreate方法。

@Overridepublicvoidoncreate(Bundle savedInstanceState){
   ……}

而如果你不加@Override,则编译器将不会检测出错误,而是会认为你为子类定义了一个新方法oncreate

  • 作者:magic_ll
  • 原文链接:https://blog.csdn.net/magic_ll/article/details/109028728
    更新时间:2022-08-21 09:17:26