zoukankan      html  css  js  c++  java
  • 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】

  • 相关阅读:
    js中的原生Ajax和JQuery中的Ajax
    this的用法
    static的特性
    时政20180807
    java compiler没有1.8怎么办
    Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet Unknown Faceted Project Problem (Java Version Mismatch)
    分词器
    [数算]有一个工程甲、乙、丙单独做,分别要48天、72天、96天完成
    一点感想
    解析Excel文件 Apache POI框架使用
  • 原文地址:https://www.cnblogs.com/qingmiaokeji/p/12381807.html
Copyright © 2011-2022 走看看