首先,要明白父类和子类是一种从一般到特殊的关系,简单来说就是,子类是一种父类。比如,苹果类继承自水果类,就说苹果是一种水果。然后,还有一点,一般是先编写多个自定义类,发现多个类之间存在共同的代码,把这些共同的代码抽取出来成为一个新类,这个类就是父类。
明白了以上两点,再来说说方法覆盖。
子类中定义了和父类相同的方法,就说子类覆盖了父类中的该方法。当然这只是个笼统的说法,深究起来其实是错误的。
那么,接下具体说一说判断方法覆盖的原则:
1)父类中private修饰的方法不能被继承,所以也就谈不上覆盖不覆盖了。
2)父类中final修饰的方法,表示最终的,只能被继承,不能被覆盖。
下面几个判断原则可以归结为:一同一大两小
一同:方法签名必须相同。
方法签名 = 方法名称 + 参数列表,参数列表 = 参数个数 + 参数类型 + 参数顺序。
也就是说,方法名称,参数个数,参数类型,参数顺序必须都相同。
一大:子类方法的访问权限大于等于父类方法的访问权限。
两小:子类方法的返回值类型小于等于父类方法的返回值类型,子类方法声明抛出的异常小于等于父类方法声明抛出的异常。
因为继承是从一般到特殊的关系,所以子类的返回值和抛出异常,应该是比父类更具体的,也就是更小。