欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java中重写父类方法加不加@Override详解

程序员文章站 2024-01-19 13:13:22
java重写父类方法加不加@override这个是我在刚学习java时遇到的问题,希望能给像我一样的新手学习时带来帮助,如有错误请指正,谢谢!class father{ public strin...

java重写父类方法加不加@override

这个是我在刚学习java时遇到的问题,希望能给像我一样的新手学习时带来帮助,如有错误请指正,谢谢!

class father{
    public string name;
    public int age;
    public father(){
    }
    public void work(){
        system.out.println("盖房子");
    }
}
class son extends father{
    public int weight;
    public son(){
    }
    public void work(){
        system.out.println(i);
    }
}

上面子类的work()方法和基类work()方法的控制器类型(包括返回值类型、参数等)是完全一致的,这种情况加不加@override都是可以的,都可以对基类方法进行重写。

因为不写的情况下,java虚拟机会进行自动识别。

class son extends father{
    public int weight;
    public son(){
    }
    public int work(int i){
        system.out.println();
    }
}

在上面这种情况下,work()方法会被系统认为是子类新定义的方法,没有继承基类,这也是被允许的。

class son extends father{
    public int weight;
    public son(){
    }
    public int work(){
        system.out.println();
        return 1;
    }
}

但是这种情况只修改返回值类型时,是不被允许的,其仍被看做基类的重写,但是返回值类型变了,就会被编辑器认为基类重写返回值类型不一致而报错。

所以存在即合理,在编写代码时如果需要对基类进行重写还是加上@override比较好,还可以检测一些容易忽略的错误。

@override的作用

@override是伪代码,表示重写(当然不写也可以),不过写上有如下好处:

1、可以当注释用,方便阅读

2、编译器可以给你验证@override下面的方法名是否是你父类中所有的,如果没有则报错。

例如,你如果没写@override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。

举例:在重写父类的oncreate时,在方法前面加上@override 系统可以帮你检查方法的正确性。

@override
public void oncreate(bundle savedinstancestate)
{…….}

这种写法是正确的,如果你写成:

@override
public void oncreate(bundle savedinstancestate)
{…….}

编译器会报如下错误:

the method oncreate(bundle) of type helloworld must override or implement a supertype method

以确保你正确重写oncreate方法(因为oncreate应该为oncreate)。

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

加不加@override有什么区别

1.简单来说@override注解是告诉编译器,下面的方法是重写父类的方法

2.如果不写@override注解去直接重写方法,编译器是不会判断你是不是正确重写了父类中的方法的。

如重写方法时参数与父类不同,程序是不会提示报错的。这会留下一个潜在的bug。

当你写了@override注解时,程序会判断你是否正确的重写了父类的对应方法。

而且加上此注解后,程序会自动屏蔽父类的方法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。