1. 程式人生 > >課後作業4

課後作業4

 

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(); } }

執行結果:

先呼叫父類的建構函式,後呼叫子類的建構函式,因為子類繼承的父類所以,呼叫子類的建構函式時父類已經存在,所以時先呼叫父類的建構函式初始化父類,後呼叫子類的建構函式。

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必須是子類的第一行程式碼。

思考:建構函式用於初始化,如果基類沒有初始化是無法進行任何操作的,所以必須在第一行程式碼就進行初始化。

2.“方法覆蓋(override)”的要點

class Fuigai {
public void coutFuigai() {
    System.out.println("fulei");
}
}
class Son extends Fuigai{
    public void coutFuigai() {
        super.coutFuigai();
        System.out.println("zilei");
    }
}
public  class Test {
    public static void main(String[] args) {
    Fuigai a=new Fuigai();
    Son b=new Son();
    b.coutFuigai();
    a.coutFuigai();
    }
}

執行結果:

同名時Java會覆蓋前一個方法的內容。

3.動手動腦3

class Parent{
    public int myValue=100;
    public void printValue() {
    System.out.println("Parent.printValue(),myValue="+myValue);
    }
}
class Child extends Parent{
    public int myValue=200;
    public void printValue() {
        System.out.println("Child.printValue(),myValue="+myValue);
    }
}
public class ParentChildTest {
public static void main(String[] args) {
    Parent parent=new Parent();
    parent.printValue();
    Child child=new Child();
    child.printValue();
    
    parent=child;
    parent.printValue();
    
    parent.myValue++;
    parent.printValue();
    
    ((Child)parent).myValue++;
    parent.printValue();
}
}

執行結果

 第一條輸出父類的myValue;

第二條輸出子類的myValue;

第三條子類的物件child賦給parent,最後呼叫物件parent相當呼叫child;

第四條修改parent的myValue,但物件child已經賦給了parent,所以最後呼叫物件parent輸出的還是child的myValue的值;

第五條修改child的myValue,並最終同第四條一樣,輸出child的myValue的值。