




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術】黑馬程序員——面向對象篇之繼承
android培訓、java培訓、期待與您交流!繼承1繼承的概述
多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那么多個類無需再定義這些屬性和行為,只要繼承單獨的那個類即可。
多個類可以稱為子類,單獨這個類稱為父類或者超類。
子類可以直接訪問父類中的非私有的屬性和行為。繼承:
1,提高代碼的復用性。
2,讓類與類之間產(chǎn)生了關系。有了這個關系,才有了多態(tài)的特征。
注意:不要為了獲取其他類的功能,簡化代碼而繼承。必須是類與類之間有所屬關系才可以繼承,所屬關系isa。
java語言中:java只支持單繼承,不支持多繼承。
因為多繼承容易帶來安全隱患:當多個父類中定義了相同功能,但功能內容不同時,子類對象不確定要運行哪一個。但是java保留了這種機制,并用另一種體現(xiàn)形式來完成表示:多實現(xiàn)。
java支持多層繼承。也就是一個繼承體系。
如何使用一個繼承體系中的功能呢?
1.想要使用體系,先查閱體系父類的描述,因為父類中定義的是該體系中的共×××。
2.通過了解共×××,就可以知道該體系的基本功能。
那么這個體系已經(jīng)可以基本使用了。
在具體調用時,要創(chuàng)建最子類的對象,為什么呢?
一是因為有可能父類不能創(chuàng)建對象;
二是創(chuàng)建子類對象可以使用更多的功能,包括基本的也包括特有的。
簡單一句話:查閱父類功能,創(chuàng)建子類對象使用功能。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繼承的特點
子父類出現(xiàn)后,類中成員的特點。
類中成員:1,變量。2,函數(shù)。3,構造函數(shù)。
1、變量
如果子類中出現(xiàn)非私有的同名成員變量時,子類要訪問本類中的變量,用this。子類要訪問父類中的同名變量,用super。super的使用和this的使用幾乎一致。this代表的是本類對象的引用。super代表的是父類對象的引用。
代碼體現(xiàn):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,子類中的函數(shù)。
當子類出現(xiàn)和父類一模一樣的函數(shù)時,子類對象調用該函數(shù)時,會運行子類函數(shù)的內容。如同父類的函數(shù)被覆蓋一樣。這種情況是函數(shù)的另一個特性:重寫(覆蓋)。當子類繼承父類,沿襲了父類的功能到子類中。但是子類雖具備該功能,但是功能的內容卻與父類不一致。這時,沒有必要定義新功能,而是使用覆蓋特性,保留父類的功能定義,并重寫功能內容。
覆蓋:
1,子類覆蓋父類,必須保證資料權限大于等于父類權限,才可以覆蓋,否則編譯失敗。
2,靜態(tài)只能覆蓋靜態(tài)。
重載:只看同名函數(shù)的參數(shù)列表。
重寫:子父類方法要一模一樣。
代碼體現(xiàn):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,子父類中的構造函數(shù)。
在對子類對象進行初始化時,父類的構造函數(shù)也會運行。那是因為子類的構造函數(shù)默認第一行有一條隱式的語句super();
super():會訪問父類中空參數(shù)的構造函數(shù)。而且子類中所有的構造函數(shù)默認第一行都是super();
為什么子類一定要訪問父類中的構造函數(shù)。
因為父類中的數(shù)據(jù)子類可以直接獲取,所以子類對象在建立時,需要先查看父類是如何對這些數(shù)據(jù)進行初始化的。所有子類在對象初始化時,要先訪問一下父類中的構造函數(shù)。
如果要訪問父類中的指定構造函數(shù),可以通過手動定義super語句的方式來指定。
注意:super語句一定定義在構造函數(shù)的第一行。
子類的實例化過程。
結論:子類的所有的構造函數(shù),默認都會訪問父類中空參數(shù)的構造函數(shù)。因為子類每一個構造函數(shù)內的第一行都有一句隱式的super();當父類中沒有空參數(shù)的構造函數(shù)時,子類必須手動通過super語句形式來制定訪問父類中的構造函數(shù)。當然,子類的構造函數(shù)第一行也可以手動指定this語句來訪問本類中的構造函數(shù)。子類中至少會有一個構造函數(shù)會訪問父類中的構造函數(shù)。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,可以修飾類,函數(shù),變量。
2,被final修飾的類不可以被繼承。為了避免被繼承,被子類復寫功能。
3,被final修飾的方法不可以被復寫。
4,被final修飾的變量時一個常量只能賦值一次,既可以修飾成員變量,又可以修飾局部變量。
當在描述事物時,一些數(shù)據(jù)的出現(xiàn)值是固定的,那么這時為了增強閱讀性,都給這些值起個名字,方便于閱讀。
而這個值不需要改變,所以加上final修飾。
作為常量:常量的書寫規(guī)范所有字符都大寫,如果由多個單詞組成。單詞間通過_連接。
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中可以定義沒有方法體的方法,該方法的具體實現(xiàn)由子類完成,該方法稱為抽象方法,包含抽象方法的類就是抽象類。
抽象方法的由來:
多個對象都具備相同的功能,但是功能具體內容有所不同,那么在抽取過程中,只抽取了功能定義,并未抽取功能主體,那么只有功能聲明,沒有功能主體的方法稱為抽象方法。
抽象類的特點:
1,抽象方法一定在抽象類中。
2,抽象方法和抽象類必須被abstract關鍵字修飾。
3,抽象類不可以用new創(chuàng)建對象。因為調用抽象方法沒意義。
4,抽象類中的抽象方法要被使用,必須有子類復寫其所有的抽象方法后,建立子類對象調用。如果子類值覆蓋了部分抽象方法,那么該子類還是抽象類。
抽象類與一般類沒有太大的不同。
該如何描述事物,就如何描述事物,只不過,該事物中出現(xiàn)了一些看不懂的東西。這些不確定的部分,也是該事物的功能,需要明確出來,但是無法定義主體。通過抽象方法來表示。
抽象類比一般類多了抽象函數(shù)。
抽象類不可以實例化。
特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。
抽象類的細節(jié):
1:抽象類中是否有構造函數(shù)?有,用于給子類對象進行初始化。
2:抽象類中是否可以定義非抽象方法?
可以。其實,抽象類和一般類沒有太大的區(qū)別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行為的。只不過,比一般類多了一個抽象函數(shù)。而且比一般類少了一個創(chuàng)建對象的部分。
3:抽象關鍵字abstract和哪些不可以共存?final,
private,static
4:抽象類中可不可以不定義抽象方法?可以。抽象方法目的僅僅為了不讓該類創(chuàng)建對象。雇員示例:
需求:公司中程序員有姓名,工號,薪水,工作內容。項目經(jīng)理除了有姓名,工號,薪水,還有獎金,工作內容。對給出需求進行數(shù)據(jù)建模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();
//不確定的功能部分,提取出來,通過抽象方法實現(xiàn)
long
end
=System.currentTimeMillis();
System.out.println("毫秒是:"+(end-start));
}
public
abstract
void
code();
//抽象不確定的功能,讓子類復寫實現(xiàn)
}
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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度高級管理人員競業(yè)禁止合同
- 農(nóng)業(yè)生產(chǎn)資金投入與財務管理手冊
- 開幕式致辭與未來發(fā)展展望報告
- 員工年終工作總結報告模板集萃
- 互聯(lián)網(wǎng)廣告投放及推廣合作協(xié)議
- 農(nóng)業(yè)生產(chǎn)投入品減量增效技術指導手冊
- 農(nóng)業(yè)產(chǎn)業(yè)扶貧政策及項目申報指導手冊
- 智能家居技術研發(fā)推廣合作協(xié)議
- 健身房客戶服務手冊
- 健身房健身器材租賃合同
- QCT1170-2022汽車玻璃用功能膜
- 環(huán)保監(jiān)測設備運維服務
- 醫(yī)德醫(yī)風考評內容及量化考評標準
- 小學信息技術-第8冊全冊-6年級下-電子工業(yè)出版社
- 《網(wǎng)絡攻擊與防御》課件第四章 基于系統(tǒng)的攻擊與防御
- 供電一把手講安全課
- JTG∕T F30-2014 公路水泥混凝土路面施工技術細則
- 建設工程施工專業(yè)分包合同(GF-2003-0213)
- 司法心理學課件
- 耳鼻喉科各項規(guī)章制度
- 湖南科技職業(yè)學院單招職業(yè)技能測試參考試題庫(含答案)
評論
0/150
提交評論