1. 程式人生 > >課程作業06

課程作業06

而不是 string pri 同名 intvalue system 運行出錯 個數 面向

1.為什麽子類的構造方法在運行之前,必須調用父類的構造方法?能不能反過來?為什麽不能反過來?提示:構造函數的主要作用是什麽?  

答:構造函數(constructor)是一種特殊的方法。主要用來在創建對象時初始化對象,即為對象成員變量賦初始值,總與new運算符一起使用在創建對象的語句中。特別的一個類可以有多個構造函數,可根據其參數個數的不同或參數類型的不同來區分它們即構造函數的重載。構造函數的功能主要用於在類的對象創建時定義初始化的狀態。構造一個對象,先調用其構造方法,來初始化其成員函數和成員變量。子類擁有父的成員變量和成員方法,如果不調用,則從父類繼承而來的成員變量和成員方法得不到正確的初始化。不能反過來調用也是這個原因,因為父類根本不知道子類有什麽變量而且這樣一來子類也得不到初始化的父類變量,導致程序運行出錯!

2.

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

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

1. 上面的程序運行結果是什麽? 2. 你如何解釋會得到這樣的輸出? 3. 計算機是不會出錯的,之所以得到這樣的運行結果也是有原因的,那麽從這些運行結果中,你能總結出Java的哪些語法特性?   答:技術分享

1)當子類與父類擁有一樣的方法,並且讓一個父類變量引用一個子類對象時,到底調用哪個方法,由對象自己的“真實”類型所決定,這就是說:對象是子類型的,它就調用子類型的方法,是父類型的,它就調用父類型的方法。

這個特性實際上就是面向對象“多態”特性的具體表現。

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

課程作業06