class Fu { intnum = 5; static void method4() { System.out.println("fu method_4"); } void method3() { System.out.println("fu method_3"); } }
class Zi extends Fu { intnum = 8; static void method4() {//注意点:静态方法不能重写 System.out.println("zi method_4"); } void method3() { System.out.println("zi method_3"); } }
class DuoTaiDemo4 {
public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num);//与父类一致 f.method4();//与父类一致 f.method3();//编译时与父类一致,运行时与子类一致 Zi z = new Zi(); System.out.println(z.num); z.method4(); z.method3(); } }
意思是:当父类变量引用子类对象时(Fu f = new Zi();
),在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写)。
class Fu {
intnum = 5;
static void method4() {
System.out.println("fu method_4");
}
void method3() {
System.out.println("fu method_3");
}
}
class Zi extends Fu {
intnum = 8;
static void method4() {//注意点:静态方法不能重写
System.out.println("zi method_4");
}
void method3() {
System.out.println("zi method_3");
}
}
class DuoTaiDemo4 {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);//与父类一致
f.method4();//与父类一致
f.method3();//编译时与父类一致,运行时与子类一致
Zi z = new Zi();
System.out.println(z.num);
z.method4();
z.method3();
}
}