class Base{
int x = 1;
static int y = 2;
String name(){
return "mother";
}
static String staticname(){
return "static mother";
}
}
class Subclass extends Base{
int x = 4;
int y = 5;
String name(){
return "baby";
}
static String staticname(){
return "static baby";
}
}
public class Test02{
public static void main(String[] args){
Subclass s = new Subclass();
System.out.println(s.x+" "+s.y+" "+s.name()+" "+s.staticname());
Base s1 = s;
System.out.println(s1.x+" "+s1.y+" "+s1.name()+" "+s1.staticname());
}
}
/*
結果:
4 5 baby static baby
1 2 baby static mother
結論:
父類的實例方法被子類的同名實例方法覆蓋
父類的靜態方法被子類的同名靜態方法隱藏
父類的實例變量和類變量可以被子類的實例變量和類變量隱藏
就"Base s1 = s"來說:把s賦值給s1時,s(子類)的方法name已經把父類的name方法覆蓋了,卻沒有覆蓋static name,而是隱藏了它。
賦值給s1后,s1的name方法已經變成了"baby",而staticname方法只是被隱藏而沒有被覆蓋,現在有還原成了"static mother"
*/