Overload和Override的区别?
Overload是重载的意思,表示在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。Override是覆盖的意思,也就是重写,它与返回值类型无关,只看参数列表。
两者不同主要体现在:
1、目的
overload用于增加程序的可读性(做法不同但是做的同一事情)。 override用于提供其超级类已经提供的方法的特定实现。
2、范围
overload 在相同的类范围内内执行。 override发生在两类具有继承(继承)的关系。
3、参数
overload参数必须不同,override参数必须相同。
4、多态性
overload 静态多态,调用的函数在编译时被选中。 override 是运行时多态性的。
5、返回类型
overload中可以相同或不同。但你必须改变参数。 override必须是相同的或协变的。
简单来说
1.重写必须继承,重载不用。
2. 重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。
3. 重写的方法修饰符大于等于父类的方法,重载和修饰符无关。
4. 重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常
总的来说,方法重载就是同名不同参.
方法重写代码:
父类:
public class Animal {
String name;
String cry;
int age;
public Animal() {
}
public Animal(String name,String cry,int age) {
this.name = name;
this.cry = cry;
this.age = age;
}
public String toString() {
return name+", "+cry+", "+age;
}
}
子类1:
package Demo;
public class Talent extends Animal {
String talent;
}
子类2:
package Demo;
public class Hobby extends Animal {
String hobby;
public String toString() {
//super
//在子类对象中,
//对父类对象的特殊引用
return super.toString()+", "+hobby;
}
}
测试类:
package Demo;
public class Test1 {
public static void main(String[] args) {
Animal p = new Animal("哮天犬","汪",100000);
Hobby s = new Hobby();
Talent e = new Talent();
s.name = "苍猫";
s.cry = "喵喵喵";
s.age = 999;
s.hobby = "睡觉钓鱼";
e.name = "老牛";
e.cry = "哞哞";
e.age = 5555;
e.talent = "排山倒海";
System.out.println(p.toString());
System.out.println(s.toString());
System.out.println(e.toString());
}
}