1.概述
2.構造**塊
3.區域性**塊
4.測試
package cn.tedu.oop;
//測試 **塊
/* * 總結:
* 1.構造方法:用來建立物件或者完成物件的初始化,在new時觸發
* 2.構造**塊:位置是類裡方法外,作用是抽取狗髒方法的共性,在new時觸發
* 3.區域性**塊:位置是方法類,作用是控制變數的作用範圍,當方法被呼叫時觸發
* 4.執行順序:
* new時:構造**塊》構造方法》區域性**塊(呼叫方法時)
* */
public
class
test04_block
}class
animal
public
animal()
public
animal
(string name)
public
animal
(string name,
int age)
public
void
show()
} //報錯,超出x的作用範圍
}}
package cn.tedu.oop;
//測試 **塊
//面試題 輸出結果是?
public
class
test05_block2
}class
animal2
}public
animal2
(int a)
}
1.概述
2.測試
1)當變數名相同時
package cn.tedu.oop;
//測試 this
public
class
test06_this
}class
demo
}
2)構造方法間的呼叫package cn.tedu.opp;
//測試 this關鍵字
/* * 總結
* 1.this代表的是 本類物件的乙個引用
* 2.this可以省略--不同名時,呼叫成員變數成員方法,都可以省略this
* 3.以下兩種情況this必須不能省略:
* 當區域性變數名和成員變數名相同時,通過this呼叫成員變數
* 當在構造方法中互相呼叫時,必須通過this呼叫,且位置必須是第一條語句
* (普通方法裡可以放在任意位置)
* */
public
class
test01_this
}class
person
public
person
(string name)
}
類包
子類任意
*public*√√
√√*protected*√√
√*default*√√
*private*
√1.概述
2.特點
3.測試
package cn.tedu.opp;
//測試 繼承
public
class
test02_extends
}class
animal
private
void
sleep()
}class
dogextends
animal
class
catextends
dog
1.特點
1.概述
1)成員變數的使用
package cn.tedu.opp;
//測試 繼承的使用--成員變數
/* * 總結
* 1.繼承關係中,父類的成員變數可以讓子類去繼承
* 2.子類繼承了父類的成員變數後,如何使用?
* 如果子類中沒有同名的資源,直接使用(省略super)
* 如果子類中含有和父類同名的資源,必須使用super來呼叫父類的內容
* */
public
class
test03_useextends
}class
fuclass
ziextends
fu}
2)成員方法的使用package cn.tedu.opp;
//測試 繼承的使用--成員方法
/* * 總結
* 1.子類可以繼承父類的所有方法(除了private的),還能進行擴充套件,還能修改父類的方法
* 2.方法重寫是什麼時候發生?--想要改父類原有的功能時
* 重寫的要求:子類的方法宣告和父親一樣 + 有足夠的許可權
* 重寫後,改的是子類的
* 3.面試題:overload和override的區別?
* overload是過載:同乙個類裡,方法名相同,但是引數列表不同的現象,好處是靈活
* override是重寫:在子類裡想要修改父類原來的實現方式,重寫的要求:子類的方法宣告和父親一樣 + 有足夠的許可權
* */
public
class
test04_useextends2
}class
father
void
drink()
private
void
play()
}//1.子類可以繼承父類的所有方法們(除了private的)
class
sonextends
father
//3.子類繼承方法後,如果想改父類原來的方法?--方法重寫
//子類的方法宣告/簽名必須和父類的一樣 + 擁有足夠的許可權(>=)
public
void
eat(
)}
3)構造方法的使用package cn.tedu.opp;
//測試 繼承的使用 -- 構造方法
/* * 1.當建立子類物件時,一定會觸發子類的構造方法
* 2.第一行就隱藏著super(),回去執行父類的無參構造(低層已經建立好了父類物件了)
* 構造方法的執行順序:父類的》子類的
* 3.當父類中只提供了含參構造時,就真的沒有無參構造了
* 子類的super()會報錯,因為找不到父類的無參構造了,只能呼叫父類的含參構造
* * */
public
class
test05_useextends3
}class
fu3;
public
fu3(
int a)
}class
zi3extends
fu3}
1.this和super的區別
2.重寫與過載的區別(overload和override的區別)
day07物件導向
為什麼使用抽象類 1 定義 dog類 有顏色屬性和叫的方法 2 定義 bird 類有顏色屬性和叫的方法 3 定義其父類 animal 1 抽取共性顏色屬性和叫的方法 1 顏色的屬性可以使用預設初始化值。2 叫的方法在父類中如何定義?1 狗是旺旺 2 鳥是嘰嘰喳喳 3 可以將父類的方法定義為狗叫讓鳥繼...
day07 物件導向程式設計(1)
修飾符 class 類名 概念 如何由類建立物件以及實現功能的呼叫 物件的記憶體解析 格式修飾符 資料型別 屬性名 初始化值 成員變數 vs 區域性變數 相同點 都是變數,定義的格式相同的。都有作用域,在其宣告的作用域內是有效的。不同點 類中宣告的位置不同 成員變數 直接宣告在類中 區域性變數 方法...
物件導向 day07 物件導向使用場景(十)
1 概述 2 知識回顧 3 使用場景 之前我們學了物件導向知識,那我們在什麼時候用呢?不可能什麼時候都需要用物件導向吧,除非你是純的物件導向語言,好的,我們下面就來談談 在學物件導向之前我們都是用 函式 物件導向程式設計其實就是 類 物件12 3456 78910 11class類名 def函式1 ...