黑馬程序員--Java三大特性

      -------android培訓java培訓、期待與您交流! ---------- 

Java語言的三大特性即是:封裝、繼承、多態

封裝:
首先,屬性可用來描述同一類事物的特徵,方法可描述一類事物可做的操作。封裝就是把屬於同一類事物的共性(包括屬性與方法)歸到一個類中,以方便使用。
1.概念:封裝也稱爲信息隱藏,是指利用抽象數據類型將數據和基於數據的操作封裝在一起,使其構成一個不可分割的獨立實體,數據被保護在抽象數據類型的內部,儘可能地隱藏內部的細節,只保留一些對外接口使之與外部發生聯繫。系統的其他部分只有通過包裹在數據外面的被授權的操作來與這個抽象數據類型交流與交互。也就是說,用戶無需知道對象內部方法的實現細節,但可以根據對象提供的外部接口(對象名和參數)訪問該對象。
2.好處:(1)實現了專業的分工。將能實現某一特定功能的代碼封裝成一個獨立的實體後,各程序員可以在需要的時候調用,從而實現了專業的分工。(2)隱藏信息,實現細節。通過控制訪問權限可以將可以將不想讓客戶端程序員看到的信息隱藏起來,如某客戶的銀行的密碼需要保密,只能對該客戶開發權限。

繼承:
就是個性對共性的屬性與方法的接受,並加入個性特有的屬性與方法
1.概念:一個類繼承另一個類,則稱繼承的類爲子類,被繼承的類爲父類。
2.目的:實現代碼的複用。
3.理解:子類與父類的關係並不是日常生活中的父子關係,子類與父類而是一種特殊化與一般化的關係,是is-a的關係,子類是父類更加詳細的分類。如class dog extends animal,就可以理解爲dog is a animal.注意設計繼承的時候,若要讓某個類能繼承,父類需適當開放訪問權限,遵循里氏代換原則,即向修改關閉對擴展開放,也就是開-閉原則。
4.結果:繼承後子類自動擁有了父類的屬性和方法,但特別注意的是,父類的私有屬性和構造方法並不能被繼承。
另外子類可以寫自己特有的屬性和方法,目的是實現功能的擴展,子類也可以複寫父類的方法即方法的重寫。

多態:
多態的概念發展出來,是以封裝和繼承爲基礎的。
多態就是在抽象的層面上實施一個統一的行爲,到個體(具體)的層面上時,這個統一的行爲會因爲個體(具體)的形態特徵而實施自己的特徵行爲。【針對一個抽象的事,對於內部個體又能找到其自身的行爲去執行。】
1.概念:相同的事物,調用其相同的方法,參數也相同時,但表現的行爲卻不同。
2.理解:子類以父類的身份出現,但做事情時還是以自己的方法實現。子類以父類的身份出現需要向上轉型(upcast),其中向上轉型是由JVM自動實現的,是安全的,但向下轉型(downcast)是不安全的,需要強制轉換。子類以父類的身份出現時自己特有的屬性和方法將不能使用。

用java做一個簡單計算器;

import java.io.*;

class OperationAttridute

{

       private double numberA=0;

       private double numberB=0;

       private double result=0;

       public double setNumberA(double i)

       {

              return numberA=i;

       }

       public double getNumberA()

       {

              return numberA;

       }

       public double setNumberB(double j)

       {

              return numberB=j;

       }

       public double getNumberB()

       {

              return numberB;

       }

       public double setResult(double z)

       {

              return result=z;

       }

       public double getResult(double a,double b)

       {

              return result;

       }

}

//將要運算的2個數字和運算結果進行封裝。

class OperationA extends OperationAttridute

{   

       public double getResult(double a,double b)

       {

              double result=0;

              result=a+b;

              return result;

       }   

}

//加法類:繼承OperationAttridute類並且覆蓋其getResult方法

class OperationS extends OperationAttridute

{

       public double getResult(double a,double b)

       {

              double result=0;

              result=a-b;

              return result;

       }

}

//減法類:繼承OperationAttridute類並且覆蓋其getResult方法

class OperationM extends OperationAttridute

{

       public double getResult(double a,double b)

       {

              double result=0;

              result=a*b;

              return result;

       }

}

//乘法類:繼承OperationAttridute類並且覆蓋其getResult方法

class OperationD extends OperationAttridute

{

       public double getResult(double a,double b)

       {

              double result=0;

              if(b==0)

              {

                     Throw new RuntimeException(“被除數不能爲0”);

              }

              result=a/b;

              return result;

       }

}

//除法類:繼承OperationAttridute類並且覆蓋其getResult方法,除法要對被除數進行判斷並拋出異常

class Operationdo

{

       public static Object expression_r(char r)

       {

              OperationAttridute oa=new OperationAttridute();      

              switch(r)

              {

                     case '+':

                     oa=new OperationA();               

                     break;

                     case '-':

                     oa=new OperationS();                

                     break;

                     case '*':

                     oa=new OperationM();        

                     break;

                     case '/':

                     oa=new OperationD();        

                     break;                 

              }

              return oa;            

       }

}

//運算類:通過傳進來的參數,來調用運算方法

class Account

{

       public static void main(String []args)throws Exception

       {

              char r='*';                  

              OperationAttridute oa=(OperationAttridute)Operationdo.expression_r(r);

              double a=oa.setNumberA(9);

              double b=oa.setNumberB(2);

              System.out.println(oa.getResult(a,b)); 

       }

}

//主程序

這樣,只需要輸入運算符號,通過多態,返回父類的方式實現了計算器的結果

 

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