1. 程式人生 > >java繼承中的覆蓋與隱藏區別

java繼承中的覆蓋與隱藏區別

   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 void 
main(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 } }