




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】黑馬程序員——面向?qū)ο笃^承
android培訓(xùn)、java培訓(xùn)、期待與您交流!繼承1繼承的概述
多個類中存在相同屬性和行為時,將這些內(nèi)容抽取到單獨一個類中,那么多個類無需再定義這些屬性和行為,只要繼承單獨的那個類即可。
多個類可以稱為子類,單獨這個類稱為父類或者超類。
子類可以直接訪問父類中的非私有的屬性和行為。繼承:
1,提高代碼的復(fù)用性。
2,讓類與類之間產(chǎn)生了關(guān)系。有了這個關(guān)系,才有了多態(tài)的特征。
注意:不要為了獲取其他類的功能,簡化代碼而繼承。必須是類與類之間有所屬關(guān)系才可以繼承,所屬關(guān)系isa。
java語言中:java只支持單繼承,不支持多繼承。
因為多繼承容易帶來安全隱患:當多個父類中定義了相同功能,但功能內(nèi)容不同時,子類對象不確定要運行哪一個。但是java保留了這種機制,并用另一種體現(xiàn)形式來完成表示:多實現(xiàn)。
java支持多層繼承。也就是一個繼承體系。
如何使用一個繼承體系中的功能呢?
1.想要使用體系,先查閱體系父類的描述,因為父類中定義的是該體系中的共×××。
2.通過了解共×××,就可以知道該體系的基本功能。
那么這個體系已經(jīng)可以基本使用了。
在具體調(diào)用時,要創(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,構(gòu)造函數(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ù)時,子類對象調(diào)用該函數(shù)時,會運行子類函數(shù)的內(nèi)容。如同父類的函數(shù)被覆蓋一樣。這種情況是函數(shù)的另一個特性:重寫(覆蓋)。當子類繼承父類,沿襲了父類的功能到子類中。但是子類雖具備該功能,但是功能的內(nèi)容卻與父類不一致。這時,沒有必要定義新功能,而是使用覆蓋特性,保留父類的功能定義,并重寫功能內(nèi)容。
覆蓋:
1,子類覆蓋父類,必須保證資料權(quán)限大于等于父類權(quán)限,才可以覆蓋,否則編譯失敗。
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,子父類中的構(gòu)造函數(shù)。
在對子類對象進行初始化時,父類的構(gòu)造函數(shù)也會運行。那是因為子類的構(gòu)造函數(shù)默認第一行有一條隱式的語句super();
super():會訪問父類中空參數(shù)的構(gòu)造函數(shù)。而且子類中所有的構(gòu)造函數(shù)默認第一行都是super();
為什么子類一定要訪問父類中的構(gòu)造函數(shù)。
因為父類中的數(shù)據(jù)子類可以直接獲取,所以子類對象在建立時,需要先查看父類是如何對這些數(shù)據(jù)進行初始化的。所有子類在對象初始化時,要先訪問一下父類中的構(gòu)造函數(shù)。
如果要訪問父類中的指定構(gòu)造函數(shù),可以通過手動定義super語句的方式來指定。
注意:super語句一定定義在構(gòu)造函數(shù)的第一行。
子類的實例化過程。
結(jié)論:子類的所有的構(gòu)造函數(shù),默認都會訪問父類中空參數(shù)的構(gòu)造函數(shù)。因為子類每一個構(gòu)造函數(shù)內(nèi)的第一行都有一句隱式的super();當父類中沒有空參數(shù)的構(gòu)造函數(shù)時,子類必須手動通過super語句形式來制定訪問父類中的構(gòu)造函數(shù)。當然,子類的構(gòu)造函數(shù)第一行也可以手動指定this語句來訪問本類中的構(gòu)造函數(shù)。子類中至少會有一個構(gòu)造函數(shù)會訪問父類中的構(gòu)造函數(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關(guān)鍵字
final:最終。作為一個修飾符,
1,可以修飾類,函數(shù),變量。
2,被final修飾的類不可以被繼承。為了避免被繼承,被子類復(fù)寫功能。
3,被final修飾的方法不可以被復(fù)寫。
4,被final修飾的變量時一個常量只能賦值一次,既可以修飾成員變量,又可以修飾局部變量。
當在描述事物時,一些數(shù)據(jù)的出現(xiàn)值是固定的,那么這時為了增強閱讀性,都給這些值起個名字,方便于閱讀。
而這個值不需要改變,所以加上final修飾。
作為常量:常量的書寫規(guī)范所有字符都大寫,如果由多個單詞組成。單詞間通過_連接。
5,內(nèi)部類定義在類中的局部位置上時,只能訪問該局部被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)由子類完成,該方法稱為抽象方法,包含抽象方法的類就是抽象類。
抽象方法的由來:
多個對象都具備相同的功能,但是功能具體內(nèi)容有所不同,那么在抽取過程中,只抽取了功能定義,并未抽取功能主體,那么只有功能聲明,沒有功能主體的方法稱為抽象方法。
抽象類的特點:
1,抽象方法一定在抽象類中。
2,抽象方法和抽象類必須被abstract關(guān)鍵字修飾。
3,抽象類不可以用new創(chuàng)建對象。因為調(diào)用抽象方法沒意義。
4,抽象類中的抽象方法要被使用,必須有子類復(fù)寫其所有的抽象方法后,建立子類對象調(diào)用。如果子類值覆蓋了部分抽象方法,那么該子類還是抽象類。
抽象類與一般類沒有太大的不同。
該如何描述事物,就如何描述事物,只不過,該事物中出現(xiàn)了一些看不懂的東西。這些不確定的部分,也是該事物的功能,需要明確出來,但是無法定義主體。通過抽象方法來表示。
抽象類比一般類多了抽象函數(shù)。
抽象類不可以實例化。
特殊:抽象類中可以不定義抽象方法,這樣做僅僅是不讓該類建立對象。
抽象類的細節(jié):
1:抽象類中是否有構(gòu)造函數(shù)?有,用于給子類對象進行初始化。
2:抽象類中是否可以定義非抽象方法?
可以。其實,抽象類和一般類沒有太大的區(qū)別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行為的。只不過,比一般類多了一個抽象函數(shù)。而且比一般類少了一個創(chuàng)建對象的部分。
3:抽象關(guān)鍵字abstract和哪些不可以共存?final,
private,static
4:抽象類中可不可以不定義抽象方法?可以。抽象方法目的僅僅為了不讓該類創(chuàng)建對象。雇員示例:
需求:公司中程序員有姓名,工號,薪水,工作內(nèi)容。項目經(jīng)理除了有姓名,工號,薪水,還有獎金,工作內(nèi)容。對給出需求進行數(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");
}
}
模板方法設(shè)計模式
什么是模板方法?
在定義功能時,功能的一部分是確定的。但是由一部分是不確定,而確定的部分在使用不確定的部分。那么這時就將不確定的部分暴露出去。由該類的子類去完成。
abstractclass
GetTime{
public
final
void
getTime(){
//此功能如果不需要復(fù)寫,可加final限定
long
start
=
System.currentTimeMillis();
code();
//不確定的功能部分,提取出來,通過抽象方法實現(xiàn)
long
end
=System.currentTimeMillis();
System.out.println("毫秒是:"+(end-start));
}
public
abstract
void
code();
//抽象不確定的功能,讓子類復(fù)寫實現(xiàn)
}
classSubDemo
extends
GetTime{
public
void
code(){
//子類復(fù)寫功能方法
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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 期貨市場交易心理學(xué)的應(yīng)用研究考核試卷
- 耐火土石礦山環(huán)境保護與綠色開采技術(shù)應(yīng)用考核試卷
- 紙質(zhì)戶外廣告材料設(shè)計與制造考核試卷
- 無線廣播電視傳輸中的信號傳輸信號覆蓋優(yōu)化方法考核試卷
- 森林經(jīng)營與管護的森林采伐與土地管理考核試卷
- 天津理工大學(xué)《媒介批評與文化影響》2023-2024學(xué)年第一學(xué)期期末試卷
- 珠海三中高二下學(xué)期期中考試文科化學(xué)試題
- 山東省菏澤市名校2025屆新初三開學(xué)摸底考(全國I卷)化學(xué)試題含解析
- 四川長江職業(yè)學(xué)院《計算機地圖制圖》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東工業(yè)職業(yè)學(xué)院《體育游戲組織與編創(chuàng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 注水試驗自動計算表
- 氣溶膠對層積云微物理特性和液態(tài)水路徑的影響
- 軟件測試類能力評分標準
- GB/T 43220-2023固體生物質(zhì)燃料中砷的測定方法
- 云貴高原(擴展課)-課件
- 大話務(wù)場景保障
- 中成藥藥品說明書的英譯
- 高等數(shù)學(xué)-函數(shù)的概念課件
- 了不起的我課件完整版
- 氣管切開病人的護理PPT課件-(1)1
- 餐廳水單萬能模板-可打印
評論
0/150
提交評論