"Anything is Object"----萬物皆對象!!!
所以程序員一定不能說自己是“單身狗”,“聖鬥士”and so on.如果程序員說類似的話,只能說明:面向對象的理解還不到位啊。廢話到此爲止,現在我們來談一下老生常談的”面向對象“:
我們都知道面向對象的四大特徵(別吐槽,三大特徵也不錯):抽象、封裝、繼承、多態;
面向對象的基礎就是類(class),類是對象的模板(理解:動物是一個類,而獅子就是一個對象);
類由屬性和行爲組成;
1.抽象:把具體的事物抽象成一個類的過程(找出共有的屬性和行爲的過程);
2.封裝:把相同屬性和行爲組合成一個類的過程;
舉個例子:我們把美國,俄羅斯,德國,中國都看做是國家的過程------------抽象;
凡是國家都有國旗,語言,首都,都會打仗。
public class Country{
//屬性
private String flag;
private String captical;
private String language;
//行爲
public void fight(){
System.out.println("保家衛國");
}
}
我們將我們理解的屬性和行爲寫成上述代碼的過程--------封裝;
其他諸如構造函數,new 對象的講解請自行Google,或者問度娘,這裏不再闡述。
--------------------------------------------------------------------------------------------------------------------
成員:類的屬性和行爲統稱爲類的成員;
類的屬性-----成員變量;
類的行爲-----成員函數;
這裏來討論一下我們在編程過程中容易混淆的地方:
1.訪問權限限定符:
java中一共有四種訪問權限限定符:public 、private、protected、默認(即我們沒有寫前三者的情況):
範圍 | public | protected | private | 默認 |
同類 | 可見 | 可見 | 可見 | 可見 |
子類同包 | 可見 | 可見 | 可見 | |
子類非同包 | 可見 | 可見 | ||
非同包 | 可見 |
public------完全沒有限制;
默認--------相同包下面可以訪問;
protected--繼承關係下可以訪問;(protected關鍵字用於在繼承時控制可見性)
private-----只有本類中可以訪問;
這裏給出一些建議:
1.不希望外面能夠訪問的,我們用private;
2.希望在繼承關係下可以訪問的,我們用protected;
3.任意可以訪問的,我們用public;
4.跨包不能訪問的,我們不聲明權限,即用默認的;
千萬要注意:不寫權限修飾符和public是有差別的;
2.關鍵字final和關鍵字static
(1)static關鍵字
static關鍵字是表示靜態的;
static聲明的成員是屬於整個類的,而不屬於某個對象;
static修飾的成員和類的生命週期相同(共存亡);
所以static修飾的成員加載優先於普通成員;
用法:
1.當需要記錄類的狀態時,可以使用靜態變量;
2.當類所實現的功能和具體的對象無關時,可以使用static方法;
3.static修飾的方法只能訪問static修飾的成員;(從加載順序上面考慮問題)
4.static成員的兩種訪問方式:
a.類名.static成員;(這裏要注意,不是所有static修飾的成員都可以直接用這種方式訪問,它也受訪問權限的制約)
b.對象.static成員;(不建議使用)
(2)final關鍵字
final的英文意思是:最終的,不可變的;final可以用來修飾類,方法,變量;
final修飾的類-----------該類不可以被繼承;
final修飾的變量--------變量值不可以被修改;
final修飾的方法--------該方法不能被重寫(覆蓋);
總結:static不可以用來修飾類class,而final可以來修飾類;
類的修飾符只有三種:public,final,abstract,當然也可以不寫
3.this關鍵字和super關鍵字
this關鍵字表示本類的;
super關鍵字表示父類的;
需要注意的一點是:他們需要寫在第一行;(詳情自行搜索,可以留言)
5.重載(overload)和重寫(override)
(1)重載的來源是構造函數,因爲構造函數的名字必須和類名相同,所以引出了重載的概念;
對於重載,我們只需要知道以下幾點即可:
1.重載跟函數的返回值無關;
2.重載的參數不同(類型不同,個數不同,順序不同)
3.函數名必須相同;
4.也可以用在繼承關係中;
(2)重寫
重寫主要用在繼承裏面,實現多態功能的;
重寫的條件:
返回值,方法名,參數都必須相同;
兩者的對比:
重載只要方法名相同,其他都不同;
重寫要求返回值,方法名,參數都必須相同;
6.成員變量和局部變量
成員變量:定義在類中,方法和塊之外的,屬於整個類,
局部變量:定義在方法中和塊中;
兩者最大的差別就是,成員變量可以不進行初始化,JVM會自動爲其提供默認值;而局部變量不可以;
7.繼承:java是全繼承,除了構造函數之外;
父類的私有成員也可以繼承但不可訪問;
爲了鞏固上述內容,下一篇文章來加強學習。
若文中有不妥或者錯誤之處,抑或需要交流幫助的,都可以留言,不吝賜教!!!