• java面对对象入门(7)-重写与重载


    方法重载和重载(换句话说,java中的多态)既不是一个非常困难的概念,也不是一个非常未知的主题。但是,我将在本文中介绍这个主题,因为同时使用多个代码示例在Java 中测面试试此类概念时,很容易犯错误。我在这里没有给出任何新概念,但是我打算修改您有关java方法重载和重载规则的现有知识。

    1.方法重载规则

    重载Java中的任何方法时,请牢记以下规则:

    1)在Java中重载方法的首要原则是更改方法签名。方法签名由参数数量,参数类型和参数顺序(如果它们是不同类型)组成。

    public class DemoClass {
        // Overloaded method
        public Integer sum(Integer a, Integer b) {
            return a + b;
        }
     
        // Overloading method
        public Integer sum(Float a, Integer b) {  //Valid
            return null;
        }
    }
    

    2)方法的返回类型从不属于方法签名的一部分,因此仅更改方法的返回类型并不等于方法重载

    public class DemoClass {
        // Overloaded method
        public Integer sum(Integer a, Integer b) {
            return a + b;
        }
     
        // Overloading method
        public Float sum(Integer a, Integer b) {     //Not valid; Compile time error
            return null;
        }
    }
    

    3)重载方法时,也不会考虑方法引发的异常。因此,您的重载方法将引发相同的异常,不同的异常,或者它仅不引发任何异常。对方法加载完全没有影响

    public class DemoClass {
        // Overloaded method
        public Integer sum(Integer a, Integer b) throws NullPointerException{
            return a + b;
        }
     
        // Overloading method
        public Integer sum(Integer a, Integer b) throws Exception{  //Not valid; Compile time error
            return null;
        }
    }
    

    2 .方法重写规则

    我们在上面阅读了方法重载的规则,现在是时候列出在重写java中的方法时应记住的规则了。
    1)重写方法和被重写方法中的方法参数列表必须完全相同。如果它们不匹配,则最终将得到重载方法。
    2)重写方法返回类型可以是在被重写放法中声明的返回类型的子类

    public class SuperClass {
        //Overriden method
        public Number sum(Integer a, Integer b) {
            return a + b;
        }
    }
     
    class SubClass extends SuperClass {
        //Overriding method
        @Override
        public Integer sum(Integer a, Integer b) {      //Integer extends Number; so it's valid
            return a + b;
        }
    }
    

    3)在所有规则之上,私有,静态和最终方法在Java中均不能以任何方式被覆盖。就如此容易 !!

    public class SuperClass {
        private Integer sum(Integer a, Integer b) {   //private method; overriding not possible
            return a + b;
        }
    }
     
    class SubClass extends SuperClass {
        //Overriding method
        public Integer sum(Integer a, Integer b) {   
            return a + b;
        }
    }
    

    4) 重写方法不能抛出已检查的异常,其层次结构比重写方法抛出的异常高。比方说,例如父类中FileNotFoundException的重写方法可以抛出异常,子类中的重写方法可以抛出异常FileNotFoundException;但不允许抛出IOExceptionException,因为IOExceptionException在层次上较高,即的超类FileNotFoundException
    更重要的是,您可以忽略覆盖方法中的异常声明。这是允许的并且完全有效。同样,无论重写方法是否声明该异常,重写方法都可以引发任何未经检查的(运行时)异常。

    public class SuperClass {
        //Overriden method
        public Integer sum(Integer a, Integer b) throws FileNotFoundException {
            return a + b;
        }
    }
     
    class SubClass extends SuperClass {
        //Overriding method
        public Integer sum(Integer a, Integer b) throws IOException {       //Not valid; Compile time error
            return a + b;
        }
        //Exception IOException is not compatible with throws clause in SuperClass.sum(Integer, Integer)
        public Integer sum(Integer a, Integer b)  {                     //It's valid; Don't declare the exception at all is permitted.
            return a + b;
        }
    }
    

    5)另外请注意,重写方法不能缩被重写方法的访问范围。简而言之,如果父类中的重写方法受到保护,则子类中的重写方法不能为私有。它必须是受保护的(相同的访问权限)或公共的(更广泛的访问权限)。

    public class SuperClass {
        //Overriden method
        protected Integer sum(Integer a, Integer b) {
            return a + b;
        }
    }
     
    class SubClass extends SuperClass {
        //Overriding method
        //Not valid; Compile time error "Cannot reduce the visibility of the inherited method from SuperClass"
        private Integer sum(Integer a, Integer b)  {    
            return a + b;
        }
    }
    

    这就是这个简单而重要的概念的全部内容,可以让您在核心Java和面向对象编程中掌握基础知识。
    学习愉快!
    **更多精彩请关注公众号【lovepythoncn】

  • 相关阅读:
    C++下遍历文件夹
    pycharm入门的简易使用教程
    easyUI—— datagrid 日期比较天数,小时
    Js获取当前日期时间+日期印证+判断闰年+日期的天数差+日期格式化+JS判断某年某月有多少天
    js获取一个月份最大天数和获取月的最后一天
    根据样式往里添加动态数据
    在同一个数据库表中添加不同的数据(笛卡尔积)
    修改某个数据可属性值根据三层 BLL
    根据条件删除
    xmlHttp.status的值(HTTP状态表)
  • 原文地址:https://www.cnblogs.com/qingmiaokeji/p/12381807.html
Copyright © 2020-2023  润新知