首先我们要知道这两个词是完全不同的意思:
重载(Overload)是指:在同一个类中可以定义很多方法,但很多的方法实现的功能是相同的,只是参数不同(类型,顺序,个数),我们把这种相同方法名,只有参数不同称为方法重载。
例如:
public class Demo02 {
public static void main(String[] args) {
//方法的重载:在同一个类中,针对相同功能的一组同名方法的定义,方法的参数(类型、个数、顺序)
Demo02 dm = new Demo02();
dm.food("芝芝莓莓");
}
public void food() {
System.out.println("炒年糕");
}
public void food(String name) {
System.out.println("你想吃:" + name);
}
public void food(String name, double price) {
if(price > 0 ) {
System.out.println("食品是:" + name + "价格为:" + price);
}else {
System.out.println("请重新输入!");
}
}
}
值得注意的是:重载的返回值类型都是相同的。
了解到重载后,我们来具体看一下重写。
重写(Override)是指:在继承关系中,子类定义了一个与父类完全相同的方法被称为重写。
重写的意义在于子类在使用父类的方法时某些方法并没有达到自己想要的运行结果,对原方法进行重写。
我们来以toString()方法为例:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
在Object类中toString()方法返回的结果是类名+@ + 哈希值,但有时我们并不希望返回这个结果,于是对toString()方法进行重写:
public class Demo03 {
public static void main(String[] args) {
Object obj = new Object();
String str1 = obj.toString();
System.out.println(str1 );
Book book = new Book("悲惨世界","雨果");
String str2 = book.toString();
System.out.println(str2);
Book bookx = new Book("西游记", "吴承恩");
System.out.println(bookx); //自动调用对象的toString()方法
}
}
//图书类
class Book {
private String bookName;
private String author;
// 构造方法
public Book(String bookName, String author) {
this.bookName = bookName;
this.author = author;
}
//重写toString()
@Override
public String toString() {
String s = String.format("<<%s>>------%s", bookName,author);
return s;
}
进行重写以后,调用toString()方法返回的就是我们想要的:
<<悲惨世界>>------雨果:
<<西游记>>------吴承恩