Java子類與父類方法的隱藏和覆蓋


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后,s1name方法已經變成了"baby",staticname方法只是被隱藏而沒有被覆蓋,現在有還原成了"static mother"

*/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM