java繼承中的覆蓋與隱藏區別
阿新 • • 發佈:2019-02-14
java 繼承隱藏與覆蓋:
1)子類只能覆蓋父類非靜態方法;且只能隱藏父類的同名變數和靜態方法。
覆蓋:呼叫的總是例項化物件的同名方法;
隱藏:呼叫的總是引用的型別的同名方法或同名變數;
2)程式碼例項:
public class A { public int i=0; public void hello(){ System.out.println("this is A"); } public static void staticTtest(){ System.out.println("A's static"); } }
public class B extends A{ public int i=1; //隱藏 public void hello(){ System.out.println("this is B"); //覆蓋 } public static void staticTtest(){//隱藏 System.out.println("B's static"); } }public class appMain { public static voidmain(String[] args){ A a=new B(); a.hello(); //非靜態方法,故覆蓋;輸出B的hello方法 System.out.println(a.i); //同名變數,故隱藏;A引用型別,故輸出A的i變數 a.staticTtest(); //同名靜態方法,故隱藏;A引用型別,故輸出A的staticTtest B b=(B)a; b.hello(); //非靜態方法,故覆蓋;輸出B的hello方法 System.out.println(b.i); //同名變數,故隱藏;B引用型別,故輸出B的i變數 b.staticTtest(); //同名靜態方法,故隱藏;B引用型別,故輸出B的staticTtest } }