zoukankan      html  css  js  c++  java
  • override和overload的区别

    override(重写):

    1.方法名、参数、返回值不同。
    2.子类方法不能缩小父类方法的访问权限。
    3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛异常)
    4.存在于父类和子类之间。
    5.方法被定义为final时不能被重写。
    overload(重载):
    1.参数类型、个数、顺序至少一种不相同。
    2.不能重载只有返回值不同的方法名。
    3.存在于父类和子类、同类中。
     
    Java 中的覆盖@Override注解 写与不写的一点点理解
    一般来说,写与不写没什么区别,JVM可以自识别
    写的情况下:即说明子类要覆盖基类的方法,基类必须存在方法
    (控制类型public,protected,返回值,参数列表类型)与子类方法完成一致的方法,否则会报错(找不到被Override的方法)。
    在不写@Override注解的情况下,当基类存在与子类各种条件都符合的方法是即实现覆盖;
    如果条件不符合时,则是当成新定义的方法使用。
    所以如果想覆盖基类方法时,最好还是写上@Override注解,这样有利于编译器帮助检查错误
    */
    //示例:
    public class OverrideTest extends Test{
    @Override//此处写与不写都能覆盖基类的t(String)方法
    public void t(String s){
    System.out.println("OverrideTest.t(String):" + s);
    }
    //此处不能写@Override注解,因为方法参数类型与基类的t2方法的参数类型不同
    //所以此处只能新定义了一个t2(float)方法,并不能实现覆盖
    public void t2(float f){
    System.out.println("OverrideTest.t2(float):" + f);
    }
    public static void main(String[] args){
    OverrideTest ot = new OverrideTest();
    ot.t("china34420");
    ot.t2(1.0f);
    ot.t2(1);
    ot.t3();
    }
    }
    /*输出:
    OverrideTest.t(String):china34420
    OverrideTest.t2(float):1.0
    Test.t2(int):1
    OverrideTest.t(String):override
    */
     
    class Test{
    public void t(String s){
    System.out.println("Test.t(String):" + s);
    }
    public void t2(int i){
    System.out.println("Test.t2(int):" + i);
    }
    public void t3(){
    t("override");
    }
    }

     

  • 相关阅读:
    2017年期末获奖名单
    2018-01-17作业
    3.2.4 条件表达式
    3.2.3if语句的嵌套2
    if嵌套语句--作业题
    软工第四次作业
    软工第五次作业-结对
    软工第三次作业
    软工第二次作业——数独
    软工实践2017年第一次作业
  • 原文地址:https://www.cnblogs.com/tuanz/p/8709063.html
Copyright © 2011-2022 走看看