繼承的目的? : 代碼的重用什么是繼承? extends 語法 : class 子類 extends 父類 { } 如果沒有聲明繼承 就默認繼承Object(所有類的祖類)靜態變量 : 不能被繼承,不過可以直接類名調用靜態方法 : 不能被繼承,可以調用成員變量 : 能被繼承,前提是子類沒有和父類相同的變量(數據類型 和 變量名) 如果有相同的變量,就不會繼承成員方法 : 會被繼承 會被覆寫局部變量 : 在方法中 無所謂被繼承 跟著方法走構造方法 : 不能 因為構造方法是用來實例化的 繼承過去,實例化的算誰的對象?所以肯定不能如果都沒有繼承 怎么會有覆寫這一說? 覆寫可以說是針對成員方法來說的 也可以說 除了成員方法,別的都沒被繼承覆寫的目的? : 代碼的重用什么是覆寫? : 返回值相同,方法名相同,參數列表相同(個數和數據類型都要相同)(針對成員方法來說的,因為別的不能被繼承,就沒有覆寫那一說) this 代表的是本類的對象super 代表的是父類型的特征 (并沒有實例化對象)this();代表調用本類的無參構造super();代表調用父類的無參構造,就算不寫,默認也會有this 和 super 都必須寫在第一行 所以 同一個方法中,this 和 super不能同時出現
代碼 : public class Ji_Cheng_Fu_Xie{ public static void main(String[] args){ Zi_Lei z = new Zi_Lei();//實例化當前類 z.m_1();//用對象名調用我自己的成員方法,應該沒問題吧(其實調用的是覆寫父類的成員方法) z.m_2();//用對象名調用自己的靜態方法,底層默認轉換為類名調用,(不存在覆寫,因為沒繼承) z.m_3();//我子類里面并沒有m_3方法吧,為什么會輸出?因為父類的繼承給我了,其實是有,上面m_2();是因為我覆寫了 ,所以就按我覆寫以后的來 ,沒覆寫,就還按父類繼承給我的來 System.out.PRintln( z.i );//調用成員變量 System.out.println( z.a );//調用靜態變量 //System.out.println( z.h );//為什么這個代碼就不能執行,報錯?因為我在父類聲明的時候,用了private 私有的 就不會被繼承 所以 報錯 Fu_Lei f = new Zi_Lei();//多態 : 父類的引用,指向的是子類的對象 f.m_1();//調用父類的m_1()方法 f.m_2();//調用父類m_2()方法(會輸出子類覆寫的那個 這就設計到多態,先去找父類的這個方法,看看被繼承了嗎,如果沒被繼承,就輸出父類的,如果被繼承了,就去子類,看看這個方法被覆寫了嗎,如果沒被覆寫,就輸出原來的成員方法,如果被覆寫了,就會輸出覆寫后的方法,所以這里輸出的是"我是子類的成員方法,我覆寫了父類的m_2" 因為我覆寫了) f.m_3();//但是這個就不一樣,這個會輸出"父類的成員方法 m_3" 因為是繼承了 但是我子類沒覆寫 }}class Fu_Lei{//聲明父類 一會被繼承的類 private int h = 100;//成員變量 這個能被繼承嗎? int i = 100;//成員變量 static int a = 10;//靜態變量 public static void m_1(){//靜態方法 (我繼承到子類了嗎?沒有,,,所以不存在覆寫) System.out.println( "父類的靜態方法 m_1" ); } public void m_2(){//在子類被覆寫的成員方法 System.out.println( "父類的成員方法 m_2" ); } public void m_3(){//在子類沒被覆寫的成員方法 System.out.println( "父類的成員方法 m_3" ); }}class Zi_Lei extends Fu_Lei{//聲明子類 并繼承父類 繼承語法 : class 子類 extends(繼承) 父類 public static void m_1(){//靜態方法 (不存在覆寫,因為沒被繼承) System.out.println( "我是子類的靜態方法,我并沒有覆寫父類的靜態方法,因為它沒繼承給我" ); } public void m_2(){//覆寫父類的成員方法m_2(); System.out.println( "我是子類的成員方法,我覆寫了父類的m_2" ); }}
新聞熱點
疑難解答