




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發技術】黑馬程序員——面向對象篇之繼承
android培訓、java培訓、期待與您交流!繼承1繼承的概述
多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那么多個類無需再定義這些屬性和行為,只要繼承單獨的那個類即可。
多個類可以稱為子類,單獨這個類稱為父類或者超類。
子類可以直接訪問父類中的非私有的屬性和行為。繼承:
1,提高代碼的復用性。
2,讓類與類之間產生了關系。有了這個關系,才有了多態的特征。
注意:不要為了獲取其他類的功能,簡化代碼而繼承。必須是類與類之間有所屬關系才可以繼承,所屬關系isa。
java語言中:java只支持單繼承,不支持多繼承。
因為多繼承容易帶來安全隱患:當多個父類中定義了相同功能,但功能內容不同時,子類對象不確定要運行哪一個。但是java保留了這種機制,并用另一種體現形式來完成表示:多實現。
java支持多層繼承。也就是一個繼承體系。
如何使用一個繼承體系中的功能呢?
1.想要使用體系,先查閱體系父類的描述,因為父類中定義的是該體系中的共×××。
2.通過了解共×××,就可以知道該體系的基本功能。
那么這個體系已經可以基本使用了。
在具體調用時,要創建最子類的對象,為什么呢?
一是因為有可能父類不能創建對象;
二是創建子類對象可以使用更多的功能,包括基本的也包括特有的。
簡單一句話:查閱父類功能,創建子類對象使用功能。class
ExtendsDemo
{
public
static
void
main(String[]
args)
{
}
}
class
Person
{
String
name;
int
age;
}
class
Student
extends
Person
{
//String
name;
//int
age;
void
study()
{
System.out.println("good
good
study");
}
}
class
Worker
extends
Person
{
//String
name;
//int
age;
void
work()
{
System.out.println("good
good
work");
}
}2繼承的特點
子父類出現后,類中成員的特點。
類中成員:1,變量。2,函數。3,構造函數。
1、變量
如果子類中出現非私有的同名成員變量時,子類要訪問本類中的變量,用this。子類要訪問父類中的同名變量,用super。super的使用和this的使用幾乎一致。this代表的是本類對象的引用。super代表的是父類對象的引用。
代碼體現:class
Fu
{
int
num
=
4;
}
class
Zi
extends
Fu
{
int
num
=
5;
void
show()
{
System.out.println(super.num);
}
}
class
ExtendsDemo2
{
public
static
void
main(String[]
args)
{
Zi
z
=
new
Zi();
System.out.println(z.num);
}
}
2,子類中的函數。
當子類出現和父類一模一樣的函數時,子類對象調用該函數時,會運行子類函數的內容。如同父類的函數被覆蓋一樣。這種情況是函數的另一個特性:重寫(覆蓋)。當子類繼承父類,沿襲了父類的功能到子類中。但是子類雖具備該功能,但是功能的內容卻與父類不一致。這時,沒有必要定義新功能,而是使用覆蓋特性,保留父類的功能定義,并重寫功能內容。
覆蓋:
1,子類覆蓋父類,必須保證資料權限大于等于父類權限,才可以覆蓋,否則編譯失敗。
2,靜態只能覆蓋靜態。
重載:只看同名函數的參數列表。
重寫:子父類方法要一模一樣。
代碼體現:class
Fu
{
void
show()
{
System.out.println("fu
show");
}
void
speak()
{
System.out.println("vb");
}
}
class
Zi
extends
Fu
{
void
show()
{
System.out.println("zi
show");
}
void
speak()
{
System.out.println("java");
}
}
class
ExtendsDemo3
{
public
static
void
main(String[]
args)
{
Zi
z
=
new
Zi();
z.show();
}
}
3,子父類中的構造函數。
在對子類對象進行初始化時,父類的構造函數也會運行。那是因為子類的構造函數默認第一行有一條隱式的語句super();
super():會訪問父類中空參數的構造函數。而且子類中所有的構造函數默認第一行都是super();
為什么子類一定要訪問父類中的構造函數。
因為父類中的數據子類可以直接獲取,所以子類對象在建立時,需要先查看父類是如何對這些數據進行初始化的。所有子類在對象初始化時,要先訪問一下父類中的構造函數。
如果要訪問父類中的指定構造函數,可以通過手動定義super語句的方式來指定。
注意:super語句一定定義在構造函數的第一行。
子類的實例化過程。
結論:子類的所有的構造函數,默認都會訪問父類中空參數的構造函數。因為子類每一個構造函數內的第一行都有一句隱式的super();當父類中沒有空參數的構造函數時,子類必須手動通過super語句形式來制定訪問父類中的構造函數。當然,子類的構造函數第一行也可以手動指定this語句來訪問本類中的構造函數。子類中至少會有一個構造函數會訪問父類中的構造函數。class
ExtendsDemo4
{
public
static
void
main(String[]
args)
{
new
Zi();
}
}
class
Fu
{
Fu()
{
System.out.println("fu
run");
}
Fu(int
x)
{
System.out.println("fu..."+x);
}
}
class
Zi
extends
Fu
{
Zi()
{
//super
();
System.out.println("zi
run");
}
Zi(int
x)
{
this();//沒有隱式的super();
//super
();
System.out.println("zi..."+x);
}
void
show(){}
}3final關鍵字
final:最終。作為一個修飾符,
1,可以修飾類,函數,變量。
2,被final修飾的類不可以被繼承。為了避免被繼承,被子類復寫功能。
3,被final修飾的方法不可以被復寫。
4,被final修飾的變量時一個常量只能賦值一次,既可以修飾成員變量,又可以修飾局部變量。
當在描述事物時,一些數據的出現值是固定的,那么這時為了增強閱讀性,都給這些值起個名字,方便于閱讀。
而這個值不需要改變,所以加上final修飾。
作為常量:常量的書寫規范所有字符都大寫,如果由多個單詞組成。單詞間通過_連接。
5,內部類定義在類中的局部位置上時,只能訪問該局部被final修飾的局部變量。class
Demo
{
public
static
final
double
PI
=
3.14;//全局常量。
final
void
show1()
{}
void
show2()
{}
}
class
SubDemo
extends
Demo
{
void
show1()
{}
}
class
FinalDemo
{
public
static
void
main(String[]
args)
{
System.out.println("Hello
World!");
}
}4抽象類
抽象類:Java中可以定義沒有方法體的方法,該方法的具體實現由子類完成,該方法稱為抽象方法,包含抽象方法的類就是抽象類。
抽象方法的由來:
多個對象都具備相同的功能,但是功能具體內容有所不同,那么在抽取過程中,只抽取了功能定義,并未抽取功能主體,那么只有功能聲明,沒有功能主體的方法稱為抽象方法。
抽象類的特點:
1,抽象方法一定在抽象類中。
2,抽象方法和抽象類必須被abstract關鍵字修飾。
3,抽象類不可以用new創建對象。因為調用抽象方法沒意義。
4,抽象類中的抽象方法要被使用,必須有子類復寫其所有的抽象方法后,建立子類對象調用。如果子類值覆蓋了部分抽象方法,那么該子類還是抽象類。
抽象類與一般類沒有太大的不同。
該如何描述事物,就如何描述事物,只不過,該事物中出現了一些看不懂的東西。這些不確定的部分,也是該事物的功能,需要明確出來,但是無法定義主體。通過抽象方法來表示。
抽象類比一般類多了抽象函數。
抽象類不可以實例化。
特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。
抽象類的細節:
1:抽象類中是否有構造函數?有,用于給子類對象進行初始化。
2:抽象類中是否可以定義非抽象方法?
可以。其實,抽象類和一般類沒有太大的區別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行為的。只不過,比一般類多了一個抽象函數。而且比一般類少了一個創建對象的部分。
3:抽象關鍵字abstract和哪些不可以共存?final,
private,static
4:抽象類中可不可以不定義抽象方法?可以。抽象方法目的僅僅為了不讓該類創建對象。雇員示例:
需求:公司中程序員有姓名,工號,薪水,工作內容。項目經理除了有姓名,工號,薪水,還有獎金,工作內容。對給出需求進行數據建模abstract
class
Employee
{
private
String
name;
private
String
id;
private
double
pay;
Employee(String
name,String
id,double
pay)
{
=
name;
this.id
=
id;
this.pay
=
pay;
}
public
abstract
void
work();
}
class
Manger
extends
Employee
{
private
int
bonus;
Manger(String
name,String
id,double
pay,int
bones)
{
super(name,id,pay);
this.bonus=
bouns;
public
void
work()
{
System.out.println("manger
work");
}
}
}
class
Pro
extends
Employee
{
Pro(String
name,String
id,double
pay)
{
super(name,id,pay);
}
public
void
work()
{
System.out.println("pro
work");
}
}
模板方法設計模式
什么是模板方法?
在定義功能時,功能的一部分是確定的。但是由一部分是不確定,而確定的部分在使用不確定的部分。那么這時就將不確定的部分暴露出去。由該類的子類去完成。
abstractclass
GetTime{
public
final
void
getTime(){
//此功能如果不需要復寫,可加final限定
long
start
=
System.currentTimeMillis();
code();
//不確定的功能部分,提取出來,通過抽象方法實現
long
end
=System.currentTimeMillis();
System.out.println("毫秒是:"+(end-start));
}
public
abstract
void
code();
//抽象不確定的功能,讓子類復寫實現
}
classSubDemo
extends
GetTime{
public
void
code(){
//子類復寫功能方法
for(int
y=0;
y<1000;
y++){
System.out.println("y");
}
}
}5接口
接口:初期理解,可以認為是一個特殊的抽象類。當抽象類中的方法都是抽象的,那么該類可以通過接口的形式來表示。
class用于定義類。interface用于定義接口。
接口定義時,格式特點:
1,接口中常見定義:常量,抽象方法。
2,接口中的成員都有固定修飾符。
常量:publicstaticfinal
方法:pub
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼小銜接主題活動設計與實施
- 2025年燈具及照明裝置合作協議書
- 2025年單一稀土氧化物及鹽類合作協議書
- 2024-2025學年福州市高三年級第四次質量檢測語文及答案
- 25年公司員工安全培訓考試試題及答案(名校卷)
- 25年公司管理人員安全培訓考試試題及答案 完整版
- 程序算法優化-全面剖析
- 細粒度訪問控制(FCAP)技術研究-全面剖析
- 融資租賃行業國際品牌建設策略-全面剖析
- AI驅動托管服務優化-全面剖析
- 《幼兒良好生活習慣培養的探究》8700字(論文)
- 水利工程驗收計劃
- 2024年小學體育新課標測評考試題庫(含答案)
- 綠色中國(第6期2024年春)學習通超星期末考試答案章節答案2024年
- 2024年廣西高考化學試卷真題(含答案解析)
- 活塞連桿組的拆裝說課課件
- 國際經濟法學習通超星期末考試答案章節答案2024年
- 人工智能崗位招聘筆試題及解答(某大型央企)2025年
- xxx智慧醫院整體網絡安全建設方案V3
- 200道100以內四個數字的加減法混合題目
- 建設事業中心工程項目大臨設施標準
評論
0/150
提交評論