【移動應用開發(fā)技術】黑馬程序員-面向對象篇之繼承_第1頁
【移動應用開發(fā)技術】黑馬程序員-面向對象篇之繼承_第2頁
【移動應用開發(fā)技術】黑馬程序員-面向對象篇之繼承_第3頁
【移動應用開發(fā)技術】黑馬程序員-面向對象篇之繼承_第4頁
【移動應用開發(fā)技術】黑馬程序員-面向對象篇之繼承_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

【移動應用開發(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論