java关于变量/方法覆盖
- 先看变量的覆盖(遮盖)
class InterCalculator {
int sum;
...
}
class DecimalCalculator extends InterCalculator {
double sum;
...
}
当由一个派生层次更高的类型(父类)来引用一个子类对象,那么被遮蔽的对象会怎样呢
DecimalCalculator dc = new DecimalCalculator();
InterCalculator ic = dc;
int s = ic.num; //access InterCalculator sum
// 如果我们访问的对象使用到了InterCalculator类型的显示类型转换或者我们把一个实例传递给接受父类类型的方法,也会是这种情况
- 而类似的方法的覆盖,我一直叫 方法的重写 (override)
class Animal {
void sleep() {
...
}
...
}
class Mammal extends Animal {
// override the method sleep
void sleep() {
...
}
...
}
class Cat extends Mammal {
// override the method sleep
void sleep() {
}
}
类似上面, 当由一个派生层次更高的类型(父类)来引用一个子类对象,那么被遮蔽的对象会怎样呢
Cat simon = new Cat();
Animal creature = simon;
...
creature.sleep(); // access Cat sleep
方法的override与前面的变量的遮蔽不太一样