面向對象理解

類和對象:
類:主觀抽象,是對象的模板,可以實例化對象
  習慣上類的定義格式:
   package xxx;  
   import xxx;  
   public class Xxxx{
    屬性 ······;
   
    構造器 ······;
   
    方法 ······;
   }
  定義屬性:實例變量
   格式:[ 修飾符 ]  類型 變量名  [ = ? ]
   實例變量定義在類中但在任何方法之外。
   實例變量有默認值:各種各樣的0。(同數組)
   實例變量的作用域至少在本類內部,受訪問控制符的限制。
   在重合作用域,實例變量和局部變量允許有命名衝突,“局部優先”。
   
  定義方法:
   格式: [ 修飾符 ]  返回類型 方法名( 參數列表 ) [ throws  異常 ] { ······ }
   java中所有參數都是值傳遞。
      當沒有值返回時,返回類型必須被定義爲void。
   返回類型必須與方法名相鄰,其他修飾符可以調換位置。

[return 返回值]  返回返回值只能有一個
   
  構造器:
   在創建對象的過程中調用的方法。
   構造器沒有返回類型。
   構造器的名字與類名相同。
   可以重載。
   格式爲:[ 修飾符 ]  類名( 參數列表 ){  },修飾符可以是private、 protected、 default、private
   在一個對象的生成周期中構造器只用一次,由系統自動調用,不允許手工調用。
   程序員沒有提供一個構造器,系統會自動提供一個無參的構造器。
   獲得對象的方式:
    通過new(在堆空間中申請分配空間),new 類名(),可以通過這種形式或的一個對象,這時的對象是無法使用,必須把他的地址存放進一個對象變量才能夠使用。
    例如 :
     Car c=new Car();
   注意:
    最好在寫類時提供一個無參的構造器。
      
  this關鍵字:
   this是個隱式參數,代表當前對象;
    publie class Student{
     private String name;
     public void setName(String name){
      this.name=name;  //this.name爲當前對象的成員變量
     }

}
   
   如果某個構造方法的第一個語句具有形式this( ··· ),那麼這個構造方法將調用同一類中的其他構造方法。
   
          注意:
           在構造器中this(...)必須放在該構造器的第一行。
    this不能出現在靜態方法裏面  

類、對象、實例三者的關係:
  類:是對象的模板,可以實例化對象
  對象:類的個體
  實例:實現的對象
  student s;
  s=new student();
   其中 Student爲類,s爲對象,new Student()爲實例,s賦值後也是實例了。
方法重載:
方法名相同,參數表不同,不考慮返回值類型(但最好還是使返回類型一致)。
編譯器根據參數,選擇一個方法,如果沒有完全匹配的,對於參數表採用“向上就近匹配原則”,但不允許模棱兩可。
方法重載屏蔽了一個對象的同一類方法由於參數不同所造成的差異。overLoad 承載   override 重寫
   
封裝:
類的屬性加private修飾符,來限制只能夠在類的內部進行訪問,有效的保護數據。
對於類中的私有屬性,要對其給出一對方法getXxx(),setXxx()訪問私有屬性,保證對私有屬性的操作的安全性。
方法公開的是方法的聲明,即只須知道參數和返回值就可以調用該方法,隱藏方法的實現的細節。
一個對象和外界的聯繫應當通過一個統一的接口,應當公開的公開,應當隱藏的隱藏。

繼承:
父類到子類是從一般到特殊的關係。
  泛化:將不同子類中的共性抽象成父類的過程。
  特化:在原有父類的基礎上加入一些個性的過程。
  原則:父類放共性,子類放個性。
繼承的關鍵字:extends
Java只支持單繼承:一個類最多隻有一個直接的父類。
      方法覆蓋:
  方法名:相同
  參數表:相同
  訪問限制符:相同或者更寬
  返回值類型:相同或者子類返回的類型是父類返回的類型的子類(在JDK5.0以後)
  拋出的異常:不能比父類更寬。
     
      super關鍵字:
  super()表示調用父類的構造器
  super()也和this()一樣必須放在方法的第一句
  super()和this()不能同時出現         
  super可以屏蔽子類屬性和父類屬性重名時帶來的屬性遮蓋,super. 表示調用父類的方法或屬性
  在子類的構造器中如果沒有指定調用父類的哪一個構造器,那麼就會調用父類的無參構造器,即super()
  
注意:
  父類的構造器不能被子類繼承
  方法和屬性可以被繼承,權限不限制能否繼承過來,限制的是能否直接訪問
  先構造父類,後構造子類,先this後super

多態:
多態分爲兩種:編譯時多態和運行時多態。
  編譯時類型:主觀概念,把它看作什麼。
  運行時類型:客觀概念,實際它是什麼。
    例:Animal a=new Dog();
         指着狗問,這個動物是什麼?
  特徵:
  1:子類以父類外表出現在客戶端。
  2:子類執行的是自己實現的代碼。
  3:子類特有的方法將無法使用。        

      運行時多態的三原則:
  對象類型不變。
  只能對對象調用編譯時類型中定義的方法。
  在程序的運行時,根據對象的運行時類型,找覆蓋後的方法來調用。(運行時動態類型綁定)
  
      強制類型轉換: 一定沒有新對象生成。(父類的引用賦值給子類的引用需要進行強制類型轉換)
      關鍵字:instanceof
           用法:引用  instanceof  類名    判斷這個引用所指向的對象是否屬於這個類。
    用在強制轉換之前,避免類型轉換異常。
   if(a instanceof Dog){
    Dog d=(Dog)a;
   }
   
多態的作用:把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。

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