1. 程式人生 > 其它 >Java知識點3

Java知識點3

Java知識點3

面向物件程式設計(OOP): 本質是以類的方式組織程式碼,以物件的組織(封裝)資料。

OOP三大特性:封裝、繼承、多型。

認識論角度理解:先有物件後有類,物件是具體的事物,類是物件的抽象。

編碼角度理解:先有類後又物件,類是物件的模具。

Java傳值方式:值傳遞,引用傳遞(傳物件,本質還是值傳遞,但實參會受影響)。結論:Java只有值傳遞。

構造器(構造方法):

​ 1.和類名相同

​ 2.沒有返回值

作用:1,new的本質是呼叫構造方法

​ 2,初始化物件的值

:定義有參構造後,如果想使用無參構造,必須顯示定義出無參構造方法。

例項化物件的原理圖

三大特性

封裝

:屬性私有,提供get、set方法

繼承:子類擴充套件(extends)父類,java只有單繼承,但能實現多個介面。所都的類都直接或間接的繼承Object類,該類就算未未定義任何方法,new出的例項也有許多繼承而來的方法,如toString,equles等方法。

super與this: this表示當前物件本身(本身呼叫者這個物件),super表示子類呼叫父類,super()函式在子類建構函式中呼叫父類的建構函式時使用,而且必須要在建構函式的第一行。super只能出現在子類的方法中。

  • super: 它引用當前物件的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員資料或函式,基類與派生類中有相同成員定義時如:super.變數名 super.成員函資料名(實參)
  • this:它代表當前物件名(在程式中易產生二義性之處,應使用this來指明當前物件;如果函式的形參與類中的成員資料同名,這時需用this來指明成員變數名)
  • super()和this()類似,區別是,super()在子類中呼叫父類的構造方法,this()在本類內呼叫本類的其它構造方法。
  • super()和this()均需放在構造方法內第一行。
  • 儘管可以用this呼叫一個構造器,但卻不能呼叫兩個。
  • this和super不能同時出現在一個建構函式裡面,因為this必然會呼叫其它的建構函式,其它的建構函式必然也會有super語句的存在,所以在同一個建構函式裡面有相同的語句,就失去了語句的意義,編譯器也不會通過。
  • this()和super()都指的是物件,所以,均不可以在static環境中使用。包括:static變數,static方法,static語句塊。
  • 從本質上講,this是一個指向本物件的指標, 然而super是一個Java關鍵字。

多型:同一方法可以根據傳送的物件不同而採取不同的行為方式,多型是方法的多型,繼承關係是基礎,不然轉換時會報型別轉換異常。

例如:Cat子類繼承Pet父類。

Cat a1 = new Cat();
Pet a2 = new Cat();//父類的引用指向子類物件
a1.eat();
a2.eat();
  • 若父類Pet中有eat()方法,且Cat子類未重寫該方法,則a1,a2都呼叫的是各自類中的eat()方法了。:Cat類中有eat()方法,繼承來的。
  • 若父類Pet中有eat()方法,且Cat子類重寫了該方法,則a1,a2都呼叫的是Cat子類中的eat()方法。
  • 若某個方法如:run()定義成Cat類中特有的方法,不是從Pet父類中繼承來的,則a2.run()的呼叫將失敗,但可以用 ((Cat) a2).run() 轉型後呼叫Cat類中的run()方法。

向上轉型:子類轉換為父類(自動轉換,丟失子類中原本可以直接呼叫的特有方法)

向下轉型:父類轉換為子類(需強轉)

注意點

  • static修飾的方法屬於類,不屬於例項,不能被重寫。
  • final修飾的屬於常量方法,不能被重寫。
  • private修飾的屬於私有方法,不能被重寫。

Static:修飾的變數和方法屬於類,可以直接用類名+ . 的方式呼叫,不用new物件再由物件去呼叫。

  • 由final修飾的類不能被繼承

  • 如果類中只有private的構造方法,那麼此類不可以被繼承。

    其原因在於:

    (1)一個類一定會有建構函式,如果不寫,那就是預設的無參建構函式,如果寫,就只有所寫的建構函式。

    (2)子類的建構函式一定會呼叫父類的建構函式,但是如果父類中只有私有的構造方法,那麼子類就無法呼叫父類,就會有問題。