重载指在一个类中,具有多个相同名称的方法,他们的参数列表却不相同
(参数类型不同、参数个数不同甚至是参数顺序不同)
重载对返回类型没有要求,可以相同也可以不同,但是不能返回类型来判断他们是否是重载。
例如
package HelloWorld;
public class Zuoye {
public static void main(String[] args) {
Zuoye z = new Zuoye();
z.fangfa1();
z.fangfa1("张旭");
}
public void fangfa1() {
System.out.println("方法1");
}
public void fangfa1(String name) {
System.out.println("也是方法1,不过有参数"+ name);
}
}
总结:
1.重载是一个类中多态性的一种表现
2.重载是在一个类中,具有相同名称不同参数列表的方法
3.重载不能根据返回类型的相同或者不同来区分重载函数。
1.重写是指在不同类中,将父类的方法在子类中重新写一遍,子类继承了父类原有的方法,但有时又不想继承父类原有一模一样的方法,所以就在返回类型,方法名,参数列表相同的情况下,对方法体进行修改进行重写,这就是重写。但注意的是 子类的访问修饰符不能比父类的更严格(意思就是父类的访问修饰符要更加 严谨,权限更少,父亲严格)
例如
package HelloWorld;
public class Father {
public static void main(String[] args) {
Son s = new Son();
s.fangfa();
}
public void fangfa() {
System.out.println("我是爸爸的方法");
}
}
class Son extends Father {
public void fangfa() {
System.out.println("我是儿子的方法");
}
}
返回结果是
重写的总结:
1. 发生在父类和子类关系之间
2. 他们的返回类型,方法名,列表参数相同 方法体不同。
3.子类不能比父类更严格 ,(父亲比儿子严格)。
4重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
private 最严格。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
default (即缺省,什么也不写,不使用任何关键字): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
public : 对所有类可见。使用对象:类、接口、变量、方法
总结重载和重写的区别:
答:方法的重载和重写都是实现多态的方式 ,区别在于重载实现的是编译时的多态性,重写实现的运行时的多态性。
重载是在发生在同一个类中,他们有相同的方法名 ,但有不同的参数列表,重载对返回类型没有特别要求,不能根据返回类型来进行区分 。
而重写发生在不同类中,发生在子类和父类之间的,重写要求子类与父类的被重写方法具有相同的返回类型,名称和参数列表。 但他们的方法体要不同。 同时,父类相较于子类,他的访问修饰符会更加严格,即访问范围更小。比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则) 。
上一篇
下一篇