重写和重载的区别
重写:
重写是发生在继承中的,子类重写父类的方法;除了方法体,实现方式不同,参数和返回类型必须相同,访问修饰符必须大于父类的权限。
重写的规则:
1.参数列表必须完全和被重写的相同
2.重写的访问修饰符必须大于大于被重写的访问修饰符;
3.重写返回的类型必须和被重写的一致或是兼容。
4.重写时抛出的异常必须是小于被重写抛出的异常,可以一样,也可以是异常的子类;
5.被重写的方法不能为private,如果是私有的则不能被称为重写,而是重新定义了一个方法,与父类无关;
6.静态方法不能重写为非静态方法(编译会出错)
7.如果父类的方法用常量final修饰,不过是何种访问修饰符,都不能重写该方法
重载
重载,发生在同一个类中,除了方法名之外,参数类型和个数不同。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。同一个类中,方法名相同,参数列表不同;
重载的规则:
1.在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)
2.不能通过访问修饰符、返回类型、抛出的异常进行重载
3.方法的异常类型和数目不会对重载造成影响。
联系与区别
1.这个两个都是实现多态的方式,区别在于,重载是编译时所体现出的多态,另一个是在运行时的多态性。
2.重载是发生在一个类上,重写是在子类继承父类之间。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;
3.重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。
4.重载对返回类型没有特殊的要求,不能根据返回类型进行区分。