簡單的理解 類的繼承 和 多態性

/*
 * Created on 2004-8-31
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author diyer6
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
/*
                                                                    類的繼承
   1、在java中通過關鍵字 extends 繼承一個已有的類,被繼承的類成爲父類(基類),新的類
         稱爲 子類(派生類)。
   2、在java中,不允許多繼承。
   3、在子類中定義一個與父類同名、返回類型、參數類型均相同的一個方法,稱爲方法的 覆蓋。
   4、覆蓋 發生在子類與父類之間。
   5、特殊變量super 提供了對父類的訪問。
   6、可以使用super 訪問父類被子類隱藏的變量和覆蓋的方法。
   7、每個子類構造方法的第一條語句,都是隱含的調用super(),如果父類沒有構造方法,
         那麼在編譯的時候就會報錯。 
      
                                                                       多態性
    1、通過覆蓋父類的方法來實現,在運行時根據傳遞的對象引用,來調用相應的方法。
    2、簡單概括多態性:當我們將子類對象的引用傳給聲明爲父類的一個對象變量,如果子類有
          這個方法就調用子類的方法,如果子類沒有這個方法就調用父類的這個方法。
    3、多態性的好處:它可以根據在運行的時候,根據我們傳遞不同對象的引用,
          來調用不同對象的方法。                      
 */
public class Animal {  //父類
 int height,weight; // 變量(數據)
 Animal(int height, int weight)//父類的構造方法 (帶參數的父類構造方法)
 {
  System.out.println("animal construct");
 }
 void eat() //父類的方法
 {
  System.out.println("animal eat");
 }
 void sleep()//父類的方法
 {
  System.out.println("animal sleep");
 }
 void breathe()//父類的方法
 {
  System.out.println("animal breathe");
 }
 

}
class Fish extends Animal { //子類 關鍵字 extends 使 Fish 繼承了 Animal 的 變量和方法
 int height;//子類的變量 ,在調用時會隱藏父類的變量。
 Fish()//子類的構造方法
 {
  super(30,40);//利用 super 調用帶參數的父類構造方法。
  //不能Animal(30,40)這樣直接調用父類構造方法。只能用super()調用。
  //父類的構造方法不能被子類繼承。
  
  //super();//在調用子類構造方法的時候,隱含的調用了 super() 變量,
 //也就是先調用父類的構造方法(不帶參數)在調用子類的構造方法。如果父類沒有構造方法,編譯器就會報錯。
  System.out.println("fish construct");
 }
 void breathe()//子類的方法
 {
  super.breathe();//通過 super 特殊變量 可以調用被子類覆蓋的父類方法。
  super.height=40;//通過 super 特殊變量 可以調用被子類隱藏的父類變量。
  System.out.println("fish bubble");
 }
}
class Integration {
 static void fn(Animal an)
 {
  an.breathe();
 }
 public static void main(String[] args){
  Animal an = new Animal(); //實例化Animal類的對象,an是對象的reference(引用)
  Fish fh = new Fish();//實例化Fish類的對象,fh是對象的reference(引用)
  an.breathe();//an 調用Animal類的void breathe()方法。
  fh.height=30;//fh給Animal類的變量int height 賦值.繼承父類的成員變量.
  fh.breathe();//fh調用它自己的方法,假如它自己沒有這個方法但父類(Animal)中有這個方法,它就會調用父類中的這個方法。
  //反之(如果有),它就會調用它自己的方法,這就是方法的覆蓋。
  
  //多態性
  Animal an;//將an聲明爲Animal的對象變量。
  Fish fh2 = new Fish();
  fh2.eat();
  an=fh;
  an=fh2;//因爲子類沒有eat()這個方法,所以這調用的是父類的eat()方法。
  Integration.fn(an);//直接用類名調用靜態方法(static)。多態性
 } 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章