12.繼承

為什么使用繼承


image

image

使用繼承

編寫父類

class Pet {
//公共的屬性和方法
}

編寫子類

class Dog extends Pet {
//子類特有的屬性和方法
}

class Penguin extends Pet {
}

子類訪問父類成員super

使用super關(guān)鍵字,super代表父類對象

訪問父類構(gòu)造方法
super(); --super調(diào)用構(gòu)造方法時届榄,只能是第一句
super(name);
訪問父類屬性
super.name;
訪問父類方法
super.print();

不能被子類繼承的父類成員

private成員
構(gòu)造方法
protected

可以修飾屬性和方法
本類亏推、同包欲间、子類可以訪問

訪問修飾符小結(jié)


image

多重繼承關(guān)系的初始化順序

1.父類屬性
2.父類構(gòu)造方法
3.子類屬性
4.子類構(gòu)造方法

class Person {
String name="李光";// 姓名
public Person() {
// super();//寫不寫該語句装黑,效果一樣
System.out.println("execute Person()");
}
public Person(String name) {
this.name = name;
System.out.println("execute Person(name)");
}
}

class Student extends Person {
String school="藍(lán)翔";// 學(xué)校
public Student() {
// super();//寫不寫該語句素标,效果一樣
System.out.println("execute Student() ");
}
public Student(String name, String school) {
super(name); // 顯示調(diào)用了父類有參構(gòu)造方法财异,將不執(zhí)行無參構(gòu)造方法
this.school = school;
System.out.println("execute Student(name,school)");
}
}

class PostGraduate extends Student {
String guide;// 導(dǎo)師
public PostGraduate() {
// super();//寫不寫該語句姻灶,效果一樣
System.out.println("execute PostGraduate()");
}
public PostGraduate(String name, String school, String guide) {
super(name, school);
this.guide = guide;
System.out.println("execute PostGraduate(name, school, guide)");
}
}

class TestInherit {
public static void main(String[] args) {
PostGraduate pgdt=null;
pgdt = new PostGraduate();
System.out.println();
pgdt=new PostGraduate("劉小光","北京大學(xué)","王老師");
}
}

繼承條件下構(gòu)造方法的調(diào)用規(guī)則如下:

如果子類的構(gòu)造方法中沒有通過super顯式調(diào)用父類的有參構(gòu)造方法红碑,也沒有通過this顯式調(diào)用自身的其他構(gòu)造方法名船,則系統(tǒng)會默認(rèn)先調(diào)用父類的無參構(gòu)造方法绰上。在這種情況下,寫不寫“super();”語句渠驼,效果是一樣的蜈块。
如果子類的構(gòu)造方法中通過super顯式調(diào)用父類的有參構(gòu)造方法,那將執(zhí)行父類相應(yīng)構(gòu)造方法迷扇,而不執(zhí)行父類無參構(gòu)造方法百揭。
如果子類的構(gòu)造方法中通過this顯式調(diào)用自身的其他構(gòu)造方法,在相應(yīng)構(gòu)造方法中應(yīng)用以上兩條規(guī)則蜓席。
特別注意的是器一,如果存在多級繼承關(guān)系,在創(chuàng)建一個子類對象時厨内,以上規(guī)則會多次向更高一級父類應(yīng)用祈秕,一直到執(zhí)行頂級父類Object類的無參構(gòu)造方法為止。
閱讀代碼雏胃,思考運(yùn)行結(jié)果

class Car {
private int site = 4; //座位數(shù)
Car(){
System.out.println ("載客量是"+site+"人);
}
public void setSite(int site){
this.site = site;
}
void print(){
System.out.print("載客量是"+site+"人");
}
}

class Bus extends Car {
Bus(int site){
setSite(site);
}
}
public static void main(String[] args) {
Bus bus = new Bus(20);
bus.print();
}

方法重寫

使用繼承之后


image

調(diào)用父類的print()方法请毛,不能顯示Dog的strain信息和Peguin的sex信息


image

以上效果如何實(shí)現(xiàn)
**子類重寫父類方法 ** @Override

方法重寫需注意的問題

1.構(gòu)造方法因?yàn)椴荒鼙焕^承,所以不能被重寫丑掺;
方法重寫的規(guī)則

方法名相同
參數(shù)列表相同
返回值類型相同或者是其子類获印;
訪問權(quán)限不能嚴(yán)于父類
抽象類

Pet pet = new Pet ("貝貝",20,40);
pet.print();
實(shí)例化Pet沒有意義

public abstract class Pet {
}
以下代碼的問題:

public abstract class Pet {
public void print() {
//…
}
}

每個子類的實(shí)現(xiàn)不同,抽象類中無法給出合理的print方法的實(shí)現(xiàn)
abstract也可用于方法——抽象方法

抽象方法沒有方法體
抽象方法必須在抽象類里
抽象方法必須在子類中被實(shí)現(xiàn)街州,除非子類是抽象類
public abstract class Pet {
public abstract void print() {
//…
}
}

修改Pet類為抽象類
修改Pet類的print()方法為抽象方法
輸出Dog信息


image

final用法

Penguin類不希望再被其他類繼承兼丰?
使用final類

public final class Penguin extends Pet {
//…
}
方法不希望被重寫?
使用final方法

public final void print () {
//…
}

屬性值不希望被修改唆缴?
使用常量

public class Penguin {
final String home ="南極";// 居住地
public void setHome(String name){
this.home=home; //錯誤鳍征,不可再賦值
}
}
練習(xí)

汽車租賃公司出租多種車輛,車型和租金情況如下表所示面徽。編寫程序?qū)崿F(xiàn)租賃價格的計算艳丛。


image

image.png
具體要求:車輛分為轎車和客車兩大類匣掸,它們都繼承自抽象類MotoVehicle,并實(shí)現(xiàn)其抽象方法calRent()氮双。請根據(jù)下面給出的類圖分別創(chuàng)建三個類碰酝,并在測試類TestRent中實(shí)現(xiàn)車輛的租賃。租賃過程如圖所示戴差。


image

image

第一個包
package nishishui;

/**
 * Created by ttc on 2018/1/2.
 */
public class Bus extends MotoVehicle {

    private int seatCount;

    public int getSeatCount() {
        return seatCount;
    }

    public void setSeatCount(int seatCount) {
        this.seatCount = seatCount;
    }

    public Bus(String no, String brand, int seatCount)
    {
        super(no,brand);
        this.seatCount = seatCount;
    }

第二個包

package nishishui;

/**
 * Created by ttc on 2018/1/2.
 */
public class Car extends MotoVehicle{


    public Car(String no, String brand)
    {
        super(no,brand);

    }
    @Override
    int calRent(int days) {
        if(getBrand().equals("寶馬"))
        {
            return 500 * days;
        }
        else
        {
            return 600 * days;
        }

    }
}

第三個包

package nishishui;

import com.sun.org.apache.bcel.internal.generic.MONITORENTER;

/**
 * Created by ttc on 2018/1/2.
 */
public abstract class MotoVehicle {
    private String no;//車牌號
    private String brand;//品牌

    abstract int calRent(int days);//計算租金

    public MotoVehicle()
    {

    }
    public MotoVehicle(String no, String brand)
    {
        this.no = no;
        this.brand = brand;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }
}

第四個包

package nishishui;

import java.util.Scanner;

/**
 * Created by ttc on 2018/1/2.
 */
public class TestRent {

    public static void main(String[] args) {
        System.out.println("歡迎");
        System.out.println("請輸入天數(shù)");
        Scanner scanner =  new Scanner(System.in);
        int days = scanner.nextInt();
        System.out.println("請輸入汽車類型1.轎車送爸,2.客車");
        int type = scanner.nextInt();
        if(type == 1)
        {
            System.out.println("輸入品牌");
            String brand = scanner.next();

            Car car = new Car("遼N12345",brand);
            int money = car.calRent(days);
            System.out.println("租金為"+money);
        }
        else
        {
//            Bus bus = new Bus();
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市暖释,隨后出現(xiàn)的幾起案子袭厂,更是在濱河造成了極大的恐慌,老刑警劉巖球匕,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纹磺,死亡現(xiàn)場離奇詭異,居然都是意外死亡亮曹,警方通過查閱死者的電腦和手機(jī)橄杨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來照卦,“玉大人讥珍,你說我怎么就攤上這事≌粒” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵趟卸,是天一觀的道長蹄葱。 經(jīng)常有香客問我,道長锄列,這世上最難降的妖魔是什么图云? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮邻邮,結(jié)果婚禮上竣况,老公的妹妹穿的比我還像新娘。我一直安慰自己筒严,他們只是感情好丹泉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸭蛙,像睡著了一般摹恨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娶视,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天晒哄,我揣著相機(jī)與錄音睁宰,去河邊找鬼。 笑死寝凌,一個胖子當(dāng)著我的面吹牛柒傻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播较木,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼红符,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了劫映?” 一聲冷哼從身側(cè)響起违孝,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泳赋,沒想到半個月后雌桑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祖今,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年校坑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片千诬。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡耍目,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出徐绑,到底是詐尸還是另有隱情邪驮,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布傲茄,位于F島的核電站毅访,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盘榨。R本人自食惡果不足惜喻粹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望草巡。 院中可真熱鬧守呜,春花似錦、人聲如沸山憨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萍歉。三九已至侣颂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枪孩,已是汗流浹背憔晒。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工藻肄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拒担。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓嘹屯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親从撼。 傳聞我的和親對象是個殘疾皇子州弟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,242評論 1 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)低零,斷路器婆翔,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法掏婶,內(nèi)部類的語法啃奴,繼承相關(guān)的語法,異常的語法雄妥,線程的語...
    子非魚_t_閱讀 31,582評論 18 399
  • 最近辦了個健身卡最蕾,想把肌肉練起來。 剛進(jìn)健身房老厌,發(fā)現(xiàn)自己還真有點(diǎn)慫瘟则。健身房里到處是肌肉男,要不就是胖子枝秤,像我這種瘦...
    柳木炭條閱讀 144評論 0 0
  • 自學(xué)彩鉛繪畫 下次一定要買好點(diǎn)的彩鉛繪紙醋拧,在素描本上畫疊色多了不易上色。 今天有時間又練了一下淀弹,繪畫真是情緒治愈系...
    搖擺lily閱讀 232評論 0 3