Java入门绊脚石之Override和Overload的区别详解
什么是Override和Overload?
Override和Overload都是Java中的重载(overload)机制,它们都允许在一个类中有多个同名的方法,但是它们有不同的应用场景。
Override指子类继承父类之后,重新定义该方法的实现过程的行为,方法的名称、参数类型、返回值类型必须要和父类完全一致,否则会编译出错;Overload指在同一个类中,方法的名称相同,但是参数类型、参数个数以及返回值类型可以不同。
Override的使用场景
在Java的继承中,子类可以重写一个父类中已经实现的方法,这就是Override。在子类中重新定义方法的实现之后,当通过子类对象来调用该方法时,将会执行子类中的新实现,并且不再执行父类中的方法实现。
举个例子,假设父类中有一个eat方法,代码如下:
public class Animal{
public void eat(){
System.out.println("Animal is eating");
}
}
如果子类想要重新实现eat方法,可以在子类中重写该方法:
public class Cat extends Animal{
@Override
public void eat(){
System.out.println("Cat is eating");
}
}
此时,在Cat类中的eat方法中实现的代码会覆盖父类中的eat方法。
Overload的使用场景
Overload是Java中常用的一种多态性形式,例如一个类中可能会有多个方法都叫做print,但是参数却不同,这就是Overload的使用场景。判断是否为Overload方法的标准有三个:方法名称相同,参数个数或者参数类型不同。此外,返回值类型不同,不能作为是否Overload的标准。因此一个类中可以有多个返回值类型不同,其他参数相同的方法,但是这些方法不能作为Overload。
举个例子,假设有一个print方法,代码如下:
public class Print{
public void print(){
System.out.println("Hello, world!");
}
public void print(int i){
System.out.println("I am " + i + " years old.");
}
public void print(String s){
System.out.println("Hello, " + s + "!");
}
}
然后我们可以通过调用对应的方法来实现不同的功能:
Print print = new Print();
print.print(); // 输出 Hello, world!
print.print(18); // 输出 I am 18 years old.
print.print("Tom"); // 输出 Hello, Tom!
注意,以上三个方法虽然是不能作为Override的例子,但是它们可以作为Overload的例子。
总结
Override和Overload是Java中的两种不同的多态形式,重载方法可以根据参数的不同选择不同的方法实现,覆盖方法则定义了子类重写父类的方法实现方式。在实际编码过程中需要根据需求进行不同的选择。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java入门绊脚石之Override和Overload的区别详解 - Python技术站