覆盖与重载

重载(overload)

对于类的方法(包括从父类中继承的方法),方法名相同、参数列表不同的方法之间就构成了重载关系。

参数列表

参数列表又叫做参数签名,指:参数的类型、参数的个数、参数的顺序。这三者只要有一个不同就叫做参数列表不同。

重载关系只能发生在一个类中吗?

子类中的某个方法和父类中继承下来的方法,也可能构成重载的关系。

看方法之间是否是重载关系,不用管方法的修饰符和返回类型以及抛出的异常,只看方法名和参数列表。而且要记住,构造器也可以重载。

覆盖(override)也叫重写

在当父类中的某些方法不能满足要求时,子类中改写父类的方法。当父类中的方法被覆盖了之后,除非用super关键字,否则就无法再调用了。

发生覆盖的条件

  1. 子类和父类的方法名称、参数列表、返回类型三者必须完全相同。而且子类方法的访问修饰符的权限不能比父类低。
  2. 子类方法不能抛出比父类方法还多的异常。即子类方法锁抛出的异常必须和父类方法所抛出的异常一致,或者是其子类,或者什么也不抛出。
  3. 被覆盖的方法不能是final类型的
  4. 被覆盖的方法不能为private。否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
  5. 被覆盖的方法不能为static。所以如果父类中的方法是静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误;如果父类和子类的方法都是静态的,仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
public class PartnerService {

    public static int overrideFunc(){

        return 110;
    }
}
public class SonService extends PartnerService {

    public static void main(String[] args) {
        int son = overrideFunc();
        System.out.println(son); //0
        int par = PartnerService.overrideFunc();
        System.out.println(par); //110
    }


    public static int overrideFunc(){

        return 0;
    }
}

覆盖与重载的相同点

  1. 都要求方法同名
  2. 都可以用于抽象方法与非抽象方法之间

覆盖与重载的区别

  1. 方法覆盖,要求参数列表完全一致,而方法重载要求参数列表必须不一致。
  2. 方法覆盖,要求返回类型完全一致,方法重载对此没有要求。
  3. 方法覆盖,只能用于子类覆盖父类的方法,方法重载用于同一类中的所有方法(包括从父类中继承而来的方法)
  4. 方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制
  5. 父类的一个方法只能被子类重载一次,而一个方法可以再所有类中被重载多次。
  6. 对于属性(成员变量)而言,是不能重载的,只能覆盖。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,719评论 0 11
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,148评论 0 62
  • 移步欢欣解语亭,满园春色尽群星。 ...
    肖建东阅读 180评论 3 4
  • 世界那么大,世界很美,我却不会欣赏。 每个人都是一面镜子,那么有很多人就有很多镜子,照来照去照得迷失了自己。人心总...
    许鹏飞_c1f6阅读 170评论 0 0