JAVA的面向對象編程

轉載:https://www.cnblogs.com/hbai/p/5106635.html

面向對象主要針對面向過程。

面向過程的基本單元是函數。

 

什麼是對象:EVERYTHING IS OBJECT(萬物皆對象)

 

所有的事物都有兩個方面:

有什麼(屬性):用來描述對象。

能夠做什麼(方法):告訴外界對象有那些功能。

後者以前者爲基礎。

大的對象的屬性也可以是一個對象。

 

爲什麼要使用面向對象:

首先,面向對象符合人類看待事物的一般規律。

對象的方法的實現細節是屏蔽的,只有對象方法的實現者瞭解細節。

方法的定義非常重要。方法有參數,也可能有返回值。

 

注意區分:對象(本身)、對象的實現者、對象的調用者。

分析對象主要從方法開始。

我們通過類來看待對象,類是對象的抽象

 

其次,採用面向對象方法可以使系統各部分各司其職、各盡所能。

對象之間的耦合性一定要低(比如不同硬盤和不同主板之間的關係)。這樣才能使每個對象本身做成最好的。

 

對於對象的要求:高內聚、低耦合,這樣容易拼裝成爲一個系統。

實現高內聚就是要最大限度低提高複用性(複用性好是因爲高內聚)。

可複用性是OOP的基礎

 

比較面向過程的思想和麪向對象的思想:

面向過程的思想:由過程、步驟、函數組成,以過程爲核心;

面向對象的思想:以對象爲中心,先開發類,得到對象,通過對象之間相互通信實現功能。

面向過程是先有算法,後有數據結構。

面向對象是先有數據結構,然後再有算法。

 

在用面向對象思想開發的過程中,可以複用對象就進行復用,如無法進行復用則開發新的對象。

開發過程是用多個簡單的對象的多個簡單的方法,來實現複雜的功能 。

從語法上來看,一個類是一個新的數據類型。

在面向對象編程中,除了簡單數據類型,就是對象類型。

定義類的格式:

class  Student{

  代碼

}

注意類名中單詞的首字母大寫。

實例變量:定義在類中但在任何方法之外。(New出來的均有初值)

局部變量:定義在方法之中的變量。

局部變量要先賦值,再進行運算,而實例變量均已經賦初值。這是局部變量和實例變量的一大區別。

實例變量的對象賦值爲null。

局部變量不允許範圍內定義兩個同名變量。實例變量的作用域在本類中完全有效,當被其他的類調用的時候也可能有效。

實例變量和局部變量允許命名衝突。

 

書寫方法的格式:

修飾符   返回值       方法名           調用過程中           方法體

可能出現的例外

 public  int/void   addNumber(參數)    throw Excepion          {}

 

例:

public  int  addNumber(int a,int b){

}

注:方法名中的參數int a,int b爲局部變量

 

類方法中的一類特殊方法:構造方法。

構造方法是當用類生成對象時,系統在生成對象的過程中利用的方法。

注意:構造方法在生成對象的時候會被調用,但並不是構造方法生成了對象。

構造方法沒有返回值。格式爲:public 方法名。

構造方法的方法名與類名相同。

構造方法是在對象生成的過程中自動調用,不可能利用指令去調用。

在一個對象的生成周期中構造方法只用一次,一旦這個對象生成,那麼這個構造方法失效。

 

用類來生成對象的語句:

Student  s=new Student()。

第一個Student表示這是用Student類進行定義。“Student()”表示調用一個無參數的構造方法。

如果()中有參數,則系統構造對象的過程中調用有參的方法。

此時S稱爲一個對象變量

 Student  s的存儲區域存放的是地址:一個對象在硬盤上佔有一個連續地址,首地址賦予s空間。

S稱爲對象Student的引用。

注意:在對象變量中存放的是引用(地址);在簡單變量中存放的是數值。

 

可以構造多個構造方法,但多個構造方法的參數表一定不同,參數順序不同即屬於不同的構造方法:

public student(string name,int a){

}

public student(int a,string name){

}

爲兩個不同的構造方法。

如果我們未給系統提供一個構造方法,那麼系統會自動提供一個爲空的構造方法。

練習:寫一個類,定義一個對象,定義兩個構造方法:一個有參,一個無參。

(編寫一個程序驗證對象的傳遞的值爲地址)

注意下面這種形式:

static void changename(student stu){stu.setName “LUCY”}

注意生成新的對象與舊對象指向無關,生成新對象生命消亡與舊對象無關。

 

面向對象方法的重載(overloading)和覆蓋(overriding)。

在有些JAVA書籍中將overriding稱爲重載,overloading稱爲過載。

Overloading在一個類中可以定義多個同名方法,各個方法的參數表一定不同。但修飾詞可能相同,返回值也可能相同。

在程序的編譯過程中根據變量類型來找相應的方法。因此也有人認爲 overloading是編譯時的多態,以後我們還會學到運行時多態。

 

爲什麼會存在overloading技術呢?作爲應對方法的細節。

利用類型的差異來影響對方法的調用。

吃()可以分爲吃肉,吃菜,吃藥,在一個類中可以定義多個吃方法。

 

構造方法也可以實現overloading。例:

public  void  teach(){};

public  void  teach(int a){};

public  void  teach(String a){}爲三種不同的方法。

 

Overloading方法是從低向高轉。

Byte—short—float—int—long—double。

 

在構造方法中,this表示本類的其他構造方法:

student(){};

student(string n){

  this();//表示調用student()

}

如果調用student(int a)則爲this(int a)。

特別注意:用this調用其他構造方法時,this必須爲第一條語句,然後纔是其他語句。

 

This表示當前對象。

 

Public  void  printNum(){

  Int number=40;

  System.out.println(this.number); 

}

此時打印的是實例變量,而非局部變量,即定義在類中而非方法中的變量。

 

This.number表示實例變量。

誰調用this.number那麼誰即爲當前(this)對象的number方法。

 

封裝:使對象的屬性儘可能私有,對象的方法儘可能的公開。用private表示此成員屬性爲該類的私有屬性。

 

Public表示該屬性(方法)公開;

Private表示該屬性(方法)爲只有本類內部可以訪問(類內部可見)。

(想用private還要用set和get方法供其他方法調用,這樣可以保證對屬性的訪問方式統一,並且便於維護訪問權限以及屬性數據合法性)

如果沒有特殊情況,屬性一定私有,方法該公開的公開。

如果不指明誰調用方法,則默認爲this。

區分實例變量和局部變量時一定要寫this。

這讓自己變得更加強。

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