久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Java|繼承學(xué)習(xí)總結(jié)

 算法與編程之美 2020-08-08

概述

繼承指一個類(通常稱為子類),,去繼承另一個類(通常稱為父類)的屬性和方法,,通過繼承子類可以使用父類的屬性和方法.

繼承主要解決的問題就是:共性抽取,抽取不同類之間的共性代碼,,減少代碼冗余和編程時間.

繼承是多態(tài)的前提,,沒有繼承就沒有多態(tài).

使用

繼承格式

public class 類名extends 繼承的父類名(){}

案例

1.編寫父類Father

public class Father {

String name="我是父類";

public void method(){

System.out .print1n("父類成員方法");

}

2.編寫子類Son,并繼承父類

public class Son extends Father{}

3.通過子類對象調(diào)用父類屬性及方法

public class Main {

public static void main(String[] args) {

Son son = new Son();

System.out.println(son.name);

son .method();

}

方法 重寫/覆蓋(Override)

規(guī)則

1.必須保證父子類方法名相同,,參數(shù)列表也相同

2.子類方法的返回值類型必須小于等于父類返回值類型的范圍

3.可以通過  @Override  注解判斷是否覆蓋重寫

4.子類方法的權(quán)限必須 大于等于 父類的權(quán)限修飾符

public > protected > defalut(啥都不寫) > private

屬性或方法重名

子類與父類的屬性或方法重名.

1.直接使用 對象名.屬性名.

實(shí)例化時等號左邊是誰,,就優(yōu)先用誰,沒有就向上找.

案例

1)為子類添加同樣的成員屬性name和成員方法method.

public class Son extends Father{

String name="我是子類";

public void method(){

System.out.print1n("子類成員方法");

}

2)調(diào)用子類對象的name屬性和method方法

public class Main {

public static void main(String[] args) {

Son son = new Son();

System.out.println( son. name);

son.method();

}

2.間接使用->通過成員方法訪問成員變量

該方法屬于誰就訪問誰的成員變量,,沒有則向上找

案例

1)給父類添加fatherMethod方法

public class Father {

String name="我是父類";

public void method(){

System.out.print1n("父類成員方法");

}

public void fatherMethod( ){

System.out.print1n(name);

}

}

2)通過子類對象調(diào)用該方法,,得到的name為父類中的

public class Main {

public static void main(String[] args) {

Son son = new Son();

son.fatherMethod() ;|

}

}

在子類中,父類成員變量,、子類成員變量,、局部變量重名,如何區(qū)分,?

局部變量:直接寫

子類成員變量:this.成員變量名/成員方法名

父類成員變量:  super.父類成員變量名/父類方法名

案例

1.為子類添加show方法

public class Son extends Father{

    String name="我是子類";

    public void method(){

        System.out.println("子類成員方法");

    }

    public void show(String name){

        System.out.println(name);

        System.out.println("this.name:"+this.name);

        System.out.println("super.name:"+super.name);

    }

}

2.調(diào)用show方法展示結(jié)果

public class Main {

    public static void main(String[] args) {

        Son son = new Son();

        son.show("我是傳入的參數(shù)");

    }

}

this()指代本類中的構(gòu)造方法,,super()指父類中的構(gòu)造方法。兩者在某一類中只能出現(xiàn)一次,,且必須在構(gòu)造方法中的第一行.

繼承中父與子類的構(gòu)造方法

1.父子構(gòu)造均無參數(shù)

在調(diào)用子類實(shí)例化時,,會自動調(diào)用父類的構(gòu)造方法。(默認(rèn)先調(diào)用父類的構(gòu)造方法,,后調(diào)用自己的構(gòu)造方法)

案例

1)父類無參構(gòu)造函數(shù)

public class Father {

    public Father(){

        System.out.println("父類無參構(gòu)造函數(shù)");

    }

}

2)子類無參構(gòu)造函數(shù)

public class Son extends Father{

    public Son(){

        System.out.println("子類無參構(gòu)造函數(shù)");

    }

}

3)實(shí)例化子類對象,,查看結(jié)果

public class Main {

    public static void main(String[] args) {

        Son son = new Son();

    }

}

2.父類有參數(shù)

子類在繼承時會報錯

解決方案

1)需要繼承無參構(gòu)造方法,父類中進(jìn)行方法重載,,編寫一個無參構(gòu)造方法

public class Father {

public Father(){}

public Father(String str){

System.out.print1n("父類無參構(gòu)造函數(shù)");

}

}

2)需要繼承有參構(gòu)造方法,,在子類中直接調(diào)用 super(父類構(gòu)造函數(shù)參數(shù)列表);

(注意事項(xiàng):必須在子類構(gòu)造方法中的調(diào)用,只能調(diào)用一次)

public class Son extends Father{

public Son(){

super( str: "一個參數(shù)");

System.out.print1n("子類無參構(gòu)造函數(shù)");

}

繼承的特性

1.子類擁有父類非 private 的屬性,、方法,。

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

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

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

5.提高了類之間的耦合性(繼承的缺點(diǎn),,耦合度高就會造成代碼之間的聯(lián)系越緊密,代碼獨(dú)立性越差),。

抽象方法

概念:

假設(shè)現(xiàn)在有三角形類,、圓形類、正方形類三個類,,它們都繼承了一個父類圖形類,,圖形類中有一個計算面積的方法,顯然這個方法并不能同時適用于3個子類,,因?yàn)閳A形面積是πr2 ,正方形面積為邊長的平方,。所以該方法要在子類中進(jìn)行覆蓋重寫.

在父類中該方法不需要有方法體,只需要有個方法名,,這種方法就稱為抽象方法.Java中提供了專門的修飾符,來修飾抽象方法.

格式:  

在方法類型前加上abstract修飾符,則表明該方法為抽象方法.

//抽象方法必須在抽象類中,,在類前加abstract 修飾符即為抽象類

public abstract class Father {

//抽象方法

public abstract void method( );

}

如何使用抽象類和抽象方法

1.不能直接new(實(shí)例化)抽象類對象.

2.必須用一個子類繼承該父類

3.必須在子類中重寫覆蓋所有抽象方法,去掉abstract,,補(bǔ)上大括號

public class Son extends Father {

@Override

public void method() {

System.out.print1n("在子類中重寫了抽象方法");

}

注意事項(xiàng)

1.不能用抽象類創(chuàng)建對象,,如果創(chuàng)建,編譯無法通過而報錯。

理解:調(diào)用抽象類的抽象方法,,沒有具體的方法體,,沒有意義。

2.抽象類中,,可以有構(gòu)造方法,在子類創(chuàng)建對象時,,會自動調(diào)用,。

理解:子類實(shí)例化時原本就會調(diào)用父類構(gòu)造方法,在抽象類中一樣適用,。

3.抽象類中,,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。

理解:未包含抽象方法的抽象類,,目的就是不想讓調(diào)用者創(chuàng)建該類對象,,通常用于某些特殊的類結(jié)構(gòu)設(shè)計,比如適配器模式,。

4.抽象類的子類,必須重寫抽象父類中所有的抽象方法,,否則,,編譯無法通過而報錯。除非該子類也是抽象類,。

理解:假設(shè)不重寫所有抽象方法,,則類中可能包含抽象方法。那么創(chuàng)建對象后,調(diào)用抽象的方法,,沒有意義,。


END

編  輯   |   王文星

    責(zé)  編   |   木有符號

 where2go 團(tuán)隊(duì)


微信號:算法與編程之美          

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多