覆盖
Java文档 says:
子类中具有相同签名的实例方法(名称,加上
其参数的数量和类型)和返回类型
超类中的实例方法会覆盖超类的方法。
子类重写方法的能力允许类
从行为“足够接近”的超类继承,然后
根据需要修改行为。
覆盖是使用继承时可用的一项功能。
当从另一个类扩展的类想要使用父类的大部分功能并且想要在某些情况下实现特定功能时,可以使用它。
在这种情况下,我们可以创建与父类具有相同名称和签名的方法。这样,新方法就会屏蔽父方法并默认被调用。
class Thought {
public void message() {
System.out.println("I feel like I am diagonally parked in a parallel universe.");
}
}
public class Advice extends Thought {
@Override // @Override annotation in Java 5 is optional but helpful.
public void message() {
System.out.println("Warning: Dates in calendar are closer than they appear.");
}
}
超载
Java 中的重载是指创建多个同名但具有不同参数的方法的能力。
这样做的主要优点是代码的简洁性。
让我们以String.valueOf
方法。该方法的重载版本定义为:
static String valueOf(boolean b)
static String valueOf(char c)
static String valueOf(char[] data)
static String valueOf(char[] data, int offset, int count)
static String valueOf(double d)
static String valueOf(float f)
static String valueOf(int i)
static String valueOf(long l)
static String valueOf(Object obj)
这意味着如果我们有任何类型的变量,我们可以通过使用来获取它的字符串表示形式String.valueOf(variable)
.
如果不允许重载,我们会有类似这样的方法......
static String valueOfBoolean(boolean b)
static String valueOfChar(char c)
static String valueOfCharArray(char[] data)
static String valueOfCharArrayWithOffset(char[] data, int offset, int count)
static String valueOfDouble(double d)
static String valueOfFloat(float f)
static String valueOfInt(int i)
static String valueOfLong(long l)
static String valueOfObject(Object obj)
...这比重载的解决方案非常丑陋且难以阅读。