1. 程式人生 > >動手動腦04

動手動腦04

1

class Grandparent 
{


    public Grandparent()
     {

            System.out.println("GrandParent Created.");
    
}


    public Grandparent(String string) 
    {

            System.out.println("GrandParent Created.String:" + string);
    
 }

}



class Parent extends Grandparent
{


    
public Parent() { //super("Hello.Grandparent."); System.out.println("Parent Created"); // super("Hello.Grandparent."); } } class Child extends Parent { public Child() { System.out.println("Child Created"); } } public
class TestInherits { public static void main(String args[]) { Child c = new Child(); } }

super呼叫基類構造方法,必須子類構造方法第一句。在下一級出來之後{super("Hello.Grandparent")}然後直接將這個傳到上一級裡面。

2.為什麼子類的構造方法在執行之前,必須呼叫父類的構造方法?能不能反過來?為什麼不能反過來?

建構函式主要是用來在建立物件時初始化物件,即為物件成員變數賦初值。由於子類是繼承父類的,所以建立子類物件時,必須先呼叫父類的構造方法,這樣子類才能有父類的屬性和方法。不能反過來是因為父類不知道子類有什麼變數,而子類也得不到父類的初始化變數。

3.在編譯原始碼時,當遇到沒有父類的類時,編譯器會定義的預設的父類(一般為Object),public void println(Object x),這一方法內部呼叫了String類的valueOf方法。valueOf方法內部又呼叫Object.toString方法:

public String toString() {

return getClass().getName() +"@" +

Integer.toHexString(hashCode());

}

4.方法覆蓋分別方法是根據宣告類屬於哪一個例如:
  A a=new A();
  B b=new B();
  a.shu();
  b.shu();

5.

如果子類與父類有相同的欄位,則子類中的欄位會代替或隱藏父類的欄位,子類方法中訪問的是子類中的欄位(而不是父類中的欄位)。如果子類方法確實想訪問父類中被隱藏的同名欄位,可以用super關鍵字來訪問它。如果子類被當作父類使用,則通過子類訪問的欄位是父類的。

當子類與父類擁有一樣的方法,並且讓一個父類變數引用一個子類物件時,物件是子型別的,它就呼叫子型別的方法,是父型別的,它就呼叫父型別的方法。