覆盖
Java Docs 说:
子类中具有相同签名的实例方法(名称,加
参数的数量和类型)和返回类型作为
超类中的实例方法会覆盖超类的方法。
子类重写方法的能力允许类
从行为“足够接近”的超类继承,然后
根据需要修改行为。
覆盖是使用继承时可用的功能。
当一个从另一个类扩展而来的类想要使用父类的大部分特性并且想要在某些情况下实现特定功能时使用它。
在这种情况下,我们可以创建与父类具有相同名称和签名的方法。这样,新方法会屏蔽父方法,默认情况下会被调用。
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.");
}
}
Overloading
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)
...这比重载的解决方案非常丑陋且难以阅读。