国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

第5章 類之間的關(guān)系

2019-11-14 12:27:07
字體:
供稿:網(wǎng)友

5.1繼承與多態(tài)

1.繼承的實現(xiàn)本質(zhì).1.  什么是繼承?繼承的語法?如何繼承?

繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

類的繼承格式

java 中通過 extends 關(guān)鍵字可以申明一個類是從另外一個類繼承而來的,一般形式如下:

類的繼承格式

class 父類 {

}

class 子類 extends 父類 {

}

2.   繼承的好處?繼承后,子類可訪問父類的哪些屬性和方法?

繼承后,就具有父類當(dāng)中的屬性和方法,子類就不會存在重復(fù)的代碼,維護(hù)性也提高,代碼也更加簡潔,提高代碼的復(fù)用性(復(fù)用性主要是可以多次使用,不用再多次寫同樣的代碼)

繼承的特性

子類擁有父類非PRivate的屬性,方法。

子類可以擁有自己的屬性和方法,即子類可以對父類進(jìn)行擴展。

子類可以用自己的方式實現(xiàn)父類的方法。

Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關(guān)系就是C類是B類的父類,B類是A類的父類,這是java繼承區(qū)別于C++繼承的一個特性。

提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯(lián)系)。

 

1.   什么是多態(tài)?多態(tài)的好處什么?哪些情況體現(xiàn)了多態(tài)?

多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。

多態(tài)性是對象多種表現(xiàn)形式的體現(xiàn)。

 

多態(tài)的優(yōu)點

1. 消除類型之間的耦合關(guān)系

2. 可替換性

3. 可擴充性

4. 接口性

5. 靈活性

6. 簡化性

 

多態(tài)存在的三個必要條件

繼承

重寫

父類引用指向子類對象

 

多態(tài)的實現(xiàn)方式

方式一:重寫: (Overload)。

方式二:接口

1. 生活中的接口最具代表性的就是插座,例如一個三接頭的插頭都能接在三孔插座中,因為這個是每個國家都有各自規(guī)定的接口規(guī)則,有可能到國外就不行,那是因為國外自己定義的接口類型。

2. java中的接口類似于生活中的接口,就是一些方法特征的集合,但沒有方法的實現(xiàn)。具體可以看 java接口 這一章節(jié)的內(nèi)容。

方式三:抽象類和抽象方法

2.   繼承和多態(tài)的關(guān)系?

 

重載,繼承,重寫和多態(tài)的區(qū)別:繼承是子類獲得父類的成員,重寫是繼承后重新實現(xiàn)父類的方法。重載是在一個類里一系列參數(shù)不同名字相同的方法。多態(tài)則是為了避免在父類里大量重載引起代碼臃腫且難于維護(hù)。

網(wǎng)上看到一個有趣的說法是:繼承是子類使用父類的方法,而多態(tài)則是父類使用子類的方法。下面的例子包含了這四種實現(xiàn):

class Triangle extends Shape {public int getSides() { //重寫return 3;}}class Rectangle extends Shape {public int getSides(int i) { //重載return i;}}public class Shape {public boolean isSharp(){return true;}public int getSides(){return 0 ;}public int getSides(Triangle tri){return 3 ;}public int getSides(Rectangle rec){return 4 ;}public static void main(String[] args) {Triangle tri = new Triangle(); //繼承System.out.println("Triangle is a type of sharp? " + tri.isSharp());Shape shape = new Triangle(); //多態(tài)System.out.println("My shape has " + shape.getSides() + " sides.");}}

注意Triangle類的方法是重寫,而Rectangle類的方法是重載。比較就可以發(fā)現(xiàn)多態(tài)對重載的優(yōu)點:如果用重載,則在父類里要對應(yīng)每一個子類都重載一個取得邊數(shù)的方法;如果用多態(tài),則父類只提供取得邊數(shù)的接口,至于取得哪個形狀的邊數(shù),怎樣取得,在子類里各自實現(xiàn)(重寫)。

1.   super的含義?2.  super與this的區(qū)別?二者的使用場景及如何使用?

super關(guān)鍵字:

我們可以通過super關(guān)鍵字來實現(xiàn)對父類成員的訪問,用來引用當(dāng)前對象的父類。

this關(guān)鍵字:

指向自己的引用

super和this的異同:

 

1)super(參數(shù)):調(diào)用基類中的某一個構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)

2)this(參數(shù)):調(diào)用本類中另一種形成的構(gòu)造函數(shù)(應(yīng)該為構(gòu)造函數(shù)中的第一條語句)

3)super: 它引用當(dāng)前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數(shù)據(jù)或函數(shù),基類與派生類中有相同成員定義時如:super.變量名   super.成員函數(shù)據(jù)名(實參)

4)this:它代表當(dāng)前對象名(在程序中易產(chǎn)生二義性之處,應(yīng)使用this來指明當(dāng)前對象;如果函數(shù)的形參與類中的成員數(shù)據(jù)同名,這時需用this來指明成員變量名)

5)調(diào)用super()必須寫在子類構(gòu)造方法的第一行,否則編譯不通過。每個子類構(gòu)造方法的第一條語句,都是隱含地調(diào)用super(),如果父類沒有這種形式的構(gòu)造函數(shù),那么在編譯的時候就會報錯。

6)super()和this()類似,區(qū)別是,super()從子類中調(diào)用父類的構(gòu)造方法,this()在同一類內(nèi)調(diào)用其它方法。

7)super()和this()均需放在構(gòu)造方法內(nèi)第一行。

8)盡管可以用this調(diào)用一個構(gòu)造器,但卻不能調(diào)用兩個。

9)this和super不能同時出現(xiàn)在一個構(gòu)造函數(shù)里面,因為this必然會調(diào)用其它的構(gòu)造函數(shù),其它的構(gòu)造函數(shù)必然也會有super語句的存在,所以在同一個構(gòu)造函數(shù)里面有相同的語句,就失去了語句的意義,編譯器也不會通過。

10)this()和super()都指的是對象,所以,均不可以在static環(huán)境中使用。包括:static變量,static方法,static語句塊。

11)從本質(zhì)上講,this是一個指向本對象的指針, 然而super是一個Java關(guān)鍵字。

5.2 接口

1.如何定義和實現(xiàn)一個接口?

接口的聲明

接口的聲明語法格式如下:

[可見度] interface 接口名稱 [extends 其他的類名] {

       // 聲明變量

       // 抽象方法

}

Interface關(guān)鍵字用來聲明一個接口。下面是接口聲明的一個簡單例子。

NameOfInterface.java 文件代碼:

/* 文件名 :NameOfInterface.java */import java.lang.*;//引入包 public interface NameOfInterface{   //任何類型 final, static 字段   //抽象方法}

接口有以下特性:

接口是隱式抽象的,當(dāng)聲明一個接口的時候,不必使用abstract關(guān)鍵字。

接口中每一個方法也是隱式抽象的,聲明時同樣不需要abstract關(guān)鍵子。

接口中的方法都是公有的。

實例

Animal.java 文件代碼:

/* 文件名 :Animal.java */interface Animal {  public void eat();  public void travel();}

接口的實現(xiàn)

當(dāng)類實現(xiàn)接口的時候,類要實現(xiàn)接口中所有的方法。否則,類必須聲明為抽象的類。

類使用implements關(guān)鍵字實現(xiàn)接口。在類聲明中,Implements關(guān)鍵字放在class聲明后面。

實現(xiàn)一個接口的語法,可以使用這個公式:

Animal.java 文件代碼:

...implements 接口名稱[,其他接口, 其他接口..., ...] ...

3.   接口和類的默認(rèn)訪問符分別是?

接口特性

接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會報錯)。

接口中可以含有變量,但是接口中的變量會被隱式的指定為 public staticfinal 變量(并且只能是 public,用 private修飾會報編譯錯誤。

接口中的方法是不能在接口中實現(xiàn)的,只能由實現(xiàn)接口的類來實現(xiàn)接口中的方法。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高淳县| 井陉县| 扎赉特旗| 南郑县| 临沧市| 剑川县| 夏邑县| 呼和浩特市| 江西省| 沧源| 汕头市| 满洲里市| 巴林右旗| 宿迁市| 泰和县| 谢通门县| 军事| 福海县| 宜兰市| 临泽县| 彝良县| 太谷县| 鸡东县| 任丘市| 山阳县| 林州市| 外汇| 福建省| 深圳市| 前郭尔| 越西县| 石家庄市| 黑河市| 鄂尔多斯市| 留坝县| 大埔县| 克山县| 镇坪县| 辽阳市| 上林县| 班戈县|