java学习笔记——方法重载修饰符
方法重载:
1.方法名必须相同
2.参数列表必须不同
3.其他修饰符可以相同,可以不同
4.可以抛出不同异常
方法重写:
1.方法名、参数列表、返回值类型必须相同
2.访问修饰符必须大于或者等于被重写的方法
3.重写的方法中,不能抛出新的异常或被重写的方法更多、更大的异常,但一定会抛出异常,也就是说只能抛出相同的异常或是被重写方法异常的子异常,还可以抛出非编译异常(RuntimeException)
4.重写的方法只会存在于具有继承关系的子类中,当父类方法用private修饰,或者final修饰,子类中有重名方法,不是重写,是定义的新方法
5.非静态方法不能被重写成静态方法
两者区别:
两者是完全不同的东西,方法重写是父子继承关系的体现,也是实现多态性的其中一步,而方法重载可以看作在同一个类中定义了两个虽然同名但完全不同的方法。
关于Java中final方法重写重载
1.final方法修饰的方法可被重载
2.final方法修饰的方法不可被子类重写
3.private修饰的方法已经隐士的声明了final,因为private修饰的方法只能被该类自己访问,所以子类中如果有相同方法名,形参列表,返回值的方法,不是重写,是重新定义了子类自己的新方法。
public class test { public final void testhanshu(){} //private void testhanshu(int x){} } class testson extends test{ public void testhanshu(){}//不可被定义,父类用final修饰,且该方法符合重写规则 }
若父类方法用private修饰,可重新定义一个同名子类方法(与final无关,final加不加都可以,private相当于隐式final):
public class test { private final void testhanshu(){} //private void testhanshu(int x){} } class testson extends test{ public void testhanshu(){}//可被定义,新方法,不是重写 }
部分转自:(18条消息) 简单明了——重载与重写区分及修饰符权限问题_无知是恶-CSDN博客_重载方法的访问修饰符可以不同