一、Overload重载
1.定义
在同一个类中,方法名相同,但是参数不同(个数、顺序、类型)!
2.应用
(1)调用重载方式时,Java编译器能通过检查调用方法的参数类型和个数以及顺序选择一个恰当的方法。
(2)构造方法可以重载
(3)方法重载发生在编译初期
(4)重载方法的返回值类型可以不相同
3.举例
System.out.prinln() 可以根据不同的参数类型和个数,返回不同的结果。
二、 override重写
1.定义
重写又称“覆盖”,在继承关系中,就是将从父类继承下来的属性或方法重新定义。重写方法与父类方法在访问权限、返回值、方法名、参数完全一致。
2. 注意
(1)加上 @Override 注解可以让编译器帮助检查是否进行了正确的覆写。进行覆写时,若是不小心些许哦方法名,编译器就会报错提示。
(2)方法名相同、方法参数相同,但是返回值不同,也是不同的方法。在Java程序中,出现这种情况,编译器会报错。
3.举例
重写Object类的方法:
在Java中,所有class类最终都继承自 Object,而Object定义了几个重要的方法:
(1)toString():把对象转换为String字符串
(2)equals():判断对象是否相等(内存地址是否相等)
(3)hashCode():计算一个对象的哈希值(哈希码)
在必要条件下,我们可以覆写以上几个方法:
例如:
//重写Comparable接口中抽象方法:提供比较大小的逻辑
@Override
public boolean equals(Object another) {
//比较内存地址
if(this == another) {
return true;
}
//同时比较“点赞数、访问量、标题”
if(another instanceof Document) {
//向下转型
Document anotherDoc = ((Document) another);
return this.star == anotherDoc.star &&
this.visit == anotherDoc.visit &&
this.title.equals(anotherDoc.title);
}
//默认返回值false
return false;
}
图1 重写equals()方法
//重写toString()方法,更有意义的输出
@Override
public String toString() {
return "Document [点赞数=" + star + ", 标题=" + title + ", 访问量=" + visit + "]";
}
图2 重写toString()方法
三、区别
1.定义不同
重载是定义相同的方法名,参数不同;重写是子类重写父类的方法。
2.范围不同
重载是在一个类中;重写是子类和父类之间的。
3.多态不同
重载是编译时多态性;重写是运行时多态性。
4.返回不同
重载对返回类型没有要求;重写要求返回类型,有兼容返回类型;
5.参数不同
重载的个数、参数类型、参数顺序可以不同;重写父子方法参数必须相同;
6.修饰不同
重载对访问修饰没有特殊要求,重写访问修饰符的限制一定要大于被重写方法的访问修饰符