Java基礎系列四 物件導向

2021-07-09 02:33:49 字數 3220 閱讀 3513

物件導向思想的特點

物件導向的特點

開發的過程:其實就是不斷的建立物件,使用物件,指揮物件做事情

(2)儲存空間

(3)初始化值

class person 

} // result 20

同下面的道理:

person(string name)

person(string name, int age)

person p1 = new person("lisi", 20);

person p2 = new person("wangwu");

person() 

(2)特點:不定義空引數的建構函式,系統會自動給乙個空參構造。定義了建構函式無論是有參還空參的,系統就不再給空引數的了

(3)過載建構函式:根據引數列表來區分是哪個建構函式

a:person() 

b:person(int age, string name)

c:person(int age)

d:person(string name, int age)

什麼時候使用static

(2)生命週期

(3)所屬不同

舉例:定義乙個非靜態的屬性,和乙個靜態屬性,再定義乙個靜態方法和非靜態方法對屬性進行輸出

class fu 

class zi extends fu } 總結:

在乙個類中如果方法中的區域性變數和方法外的成員變數重名

,那麼如果在方法內輸出這變數

,就是方法自己的變數裡的值

,想要區分要用

this,

加上this.

就是輸出成員變數的值

在子父類中如果出現成員變數重名的時候

,在子類輸出會輸出自己的變數裡的值

,想要區分要用

super,

加上super.

就是輸出父類裡變數的值

this

和super

的區分:

**this

代表本類物件的引用

super

本類物件父類的引用。

**this

可以用於區分區域性變數和成員變數同名的情況。

super

可以用於區分子類和父類成員變數同名的情況。

**一般,子類中不會出現和父類同名的成員變數。面試可能問到。

class fu  public void method() {} } class zi extends fu } 

子類中存在和父類成員方法同名的這種現象,叫做重寫,複寫,覆蓋。

重寫(override)

和過載(overload)

的區別:

過載的特點:

**在同一類中。

**方法名相同,引數列表不同。

重寫的特點:

**要有繼承關係。在子父類中

**方法的宣告相同。

(方法名和引數列表都相同

) ***

覆蓋時,子類方法許可權一定要大於等於父類方法許可權

父類的許可權不能是私有的

***靜態只能覆蓋靜態。

class fu fu(int age) } class zi extends fu zi(int age) } zi z = new zi(); zi z = new zi(30); 

總結:子類中所有的構造方法預設都會訪問父類中空引數的構造方法。

**因為每乙個構造方法的第一行都有一條預設的語句

super();

當父類中沒有空引數的構造方法時,子類的建構函式必須通過

this

或者super

語句指定要訪問的構造方法。或者手動提供無參構造方法。

this(...):

呼叫本類中的構造方法

super(...):

呼叫父類中的構造方法

構造方法用於建立物件,並進行初始化

.建議如果你寫了有參的建構函式

,也要把空參的建構函式再手動加上

否則你定義了有參的建構函式

,空參的系統就不會再給了

你這樣建立物件的時候就會報錯

person p = new person();//

這句話是會去找空參的建構函式

class person person(int age) person(int age,string name) } //person p =new person(); //

系統預設給出無參構造

//當你手動給出構造方法後,系統就不會再給出缺省的空的構造方法。

手動無引數,如果你想給屬性賦值或者做一些初始化,無參你別刪不就行了嗎。

class demo public void setname(string name) public string getname() }

物件多型的前提

多型中成員的特點:

(我們只研究特殊的,就是說名字一樣的東西

) fu f = new zi(); a

:成員變數:編譯和執行都看fu。

b:非靜態方法:編譯看

fu,執行看zi。

c:靜態方法:編譯和執行都看fu。

舉例:動物的例子:

向上轉型

animal a = new cat(); a.eat(); // a.catchmouse();

向下轉型

cat c = (cat) a; 

c.eat(); 

c.catchmouse();

animal dog = new dog();

// 向上轉型

cat c = (cat)dog;

// 向下轉型

轉換異常

dog d = (dog)dog; 

總結:

無論是向上轉型還是向下轉型

,變化的都是子類物件

,絕對不能把父類物件強轉為子類型別

四 物件導向 繼承

繼承 一 什麼是繼承 概念 父親有的東西,並且允許繼承,所有孩子就都會有 乙個父類可以擁有多個子類 乙個子類只能擁有乙個父類 二 父子之間的轉換 子類可以轉換成父類,這個父類只能轉換成之前的子類 子類可繼承父類,父類可代表子類 兄弟之間不可繼承。namespace 繼承 namespace 繼承 p...

scale教程(四)物件導向

1.今天來講下scala中的物件導向 2.定義類和指定構造方法。定義乙個person類 帶有三個引數 class person fn string,ln string,s person println i am testing code def introduction string else ob...

Python學習之路四 物件導向

物件 object 可以看做是資料 特性 以及由一系列可以訪問 操作這些資料的方法所組成的集合。主要有以下特點 封裝 主要是乙個隱藏了各種細節的集合,只公開 單元的對外介面 繼承 就像人類遺傳繼承,孩子會繼承父母的特點,但也可以擁有屬於自己的特點 多型 意味著可以對不同類的物件使用同樣的操作。前兩個...