• Java Override和@Override


    Override : 重写。 当子类的某个方法的方法名、返回值、参数列表均与父类的方法保持一致,我们就可以说子类重写了父类的该方法。

     其中需要注意:

    1.  父类中修饰符为private, static, finnal的方法是无法被子类Override的
    2.  子类方法的返回值可以是父类方法返回值的子类或一致。例如父类方法返回值为Object类型,子类方法返回值是String,这是OK的
    3.  子类方法的访问权限修饰符要对父类进行扩展或者一致。例如父类方法由protected修饰,子类方法是public,这是OK的

     下面我们就来举个栗子 :   for example 

     父类: BaseClass

    package test.annotations;
    
    public class BaseClass {
    
        public void dosomething(String str){
            System.out.println("Base dosomething: " + str);
        }
    }
    

    子类: ChildClass

    package test.annotations;
    
    public class ChildClass extends BaseClass{
        
        //@Override
        public void dosomething(String str){
            System.out.println("Child dosomething :" + str);
        }
    }
    

    测试类: OverrideTest

    package test.annotations;
    
    public class OverrideTest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		BaseClass base = new ChildClass();
    		base.dosomething("override");
    	}
    
    }
    

    如图,测试结果为 :

        Child dosomething : override

    简单典型的重写栗子。我们做一下修改,把BaseClass类的dosomething方法参数改为Object类型,然后再次运行测试类,结果为:

        Base dosomething : override

    原因:修改BaseClass方法参数后,dosomething在父类与子类中构不成重写。因此当调用dosomething方法时,检查到父类中有这个方法并且该方法未被子类override,因此调用父类的dosomething方法。

    如果我们继续将ChildClass类的dosomething方法之上的注释"//"去掉,就会发现编译器提示出错 : 

        The method dosomething(String) of type must override or implement a supertype method

    原因:此时@Override注释说明dosomething为重写方法,而此方法实际上构不成重写,因此编译器提示错误。删除@Override注释或者在父类中再添加一个dosomething方法以达到构成重写的效果即可。

    由上面可见,当我们对父类进行修改时,很有可能会在无法察觉的时候对一些曾经使用重写特性的地方产生影响。这个时候,我们就需要@Override注释了。当你想要在子类中override父类的方法时,请务必加上@Override注释,这样当父类方法有改动时,编译器也会在子类方法处做出相应错误提示,避免人工失误。这是不是也说明一个道理: 错误扼杀在编译阶段,要比在运行时阶段处理好得多。

    总结:当你想要在子类中override父类的方法时,请务必加上@Override注释。

    分享一篇文章:http://www.journaldev.com/817/overriding-methods-in-java-always-use-override-annotation

  • 相关阅读:
    C#获取机器码
    页面延时跳转
    asp.net 删除文件夹,指定文件夹,删除文件夹和所有文件,删除权限设置,递归删除文件夹目录及文件
    c# 关闭程序
    Asp.net网站开发架构设计要求
    ASP.NET页面刷新方法总结
    一个不错的弹出窗口,修改了JS文件可多弹
    c# 实现应用程序重启
    ajax web页面复杂处理延时、客户交互问题
    C# 中关于汉字与16进制转换的代码
  • 原文地址:https://www.cnblogs.com/djoel/p/5660397.html
Copyright © 2020-2023  润新知