首先,解释一下,有些书籍把重写也称为覆写
一,重写的方法调用由对象确定,也就是动态绑定,在运行时确定,一般被重写的是方法;
隐藏的方法调用由引用确定,也就是静态绑定,在编译时确定,一般被隐藏的是属性或者静态方法,注意,隐藏属性的条件是子类中有和父类同名的属性即可,该属性的数据类型可以不同
二,父类的方法在子类中被重写后,不能用子类实例调用父类中被重写的方法,
父类中的方法或者属性在子类中被隐藏后,可以用一个子类实例强制转换(向上转型)成父类类型,从而调用父类中被隐藏的属性或者方法
比如以下代码
class Cat{
String field = "string";
public void f1(){
System.out.println("Cat f1");
}
}
class WhiteCat extends Cat{
int field = 5;
public void f1(){
System.out.println("WhiteCat f1");
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat cat = new WhiteCat();
cat.f1();
WhiteCat wcat = new WhiteCat();
((Cat)wcat).f1();
System.out.println(wcat.field);
System.out.println(((Cat)wcat).field);
}
}
输出是
WhiteCat f1
WhiteCat f1
5
string