日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java 面向?qū)ο笾R(shí)點(diǎn)整理

 小小郡 2017-03-11

1. 重載、重寫和隱藏

1). 重載(overload):

方法重載就是多個(gè)方法名稱相同但是參數(shù)類型或者參數(shù)個(gè)數(shù)不同的方法, 與返回值類型和修飾符無(wú)關(guān)

class Test {
    public int test(int a) {
        return a;
    }

    public String test(String a) {
        return a;
    }

    public float test(int a, String b) {
        return 0f;
    }

    public float test(String a, int b) {
        return 1.0f;
    }

    String test(float a) {
        return "";
    }

    String test(int a) {//該方法不是重載  
        return "";
    }
}

前面五個(gè)互為重載,第一個(gè)和第六個(gè)雖然返回值類型不同,但參數(shù)相同,所以第一個(gè)和第六個(gè)參數(shù)不是重載

2). 重寫(override):

子類繼承父類時(shí),子類的方法名稱、參數(shù)類型、參數(shù)個(gè)數(shù)與父類 完全相同 ,則認(rèn)為子類重寫了父類的方法。

方法重寫規(guī)則:

  • 參數(shù)列表和原方法完全相同
  • 返回值類型和原方法相同或者為父類返回值類型的子類型
  • 不能比原方法限制更嚴(yán)格的訪問(wèn)級(jí)別(舉例:父類方法為public,那么子類不能為protected、private)
  • 父類方法被定義為final時(shí),則不能被重寫
  • 父類方法被定義為static時(shí),不能被重寫,但是可以重寫聲明一個(gè)相同的方法(參考 隱藏
  • 不能拋出新的異?;虮仍椒ǜ鼜V泛的異常(父類拋出IOException,重寫方法不能拋出Exception只能拋出IOException或者IOException子類異常)

3). 隱藏:

隱藏是針對(duì)于父類的成員變量和靜態(tài)方法而言的。子類中聲明了和父類相同的變量名或靜態(tài)方法(方法名相同、參數(shù)列表相同、返回類型相同)則實(shí)現(xiàn)了對(duì)父類成員變量和靜態(tài)方法的隱藏,下面舉個(gè)例子有助理解:

class A {  
    static int a = 1;  
    static int b = 2;  
    int c = 33;

    public static void printA() {  
        System.out.print(a);  
    }  

    public static void printB() {  
        System.out.print(b);  
    }  

}

class B extends A {  
    static int a = 3;  
    static int b = 4;
    int c = 44;

    public static void printB() { 
        System.out.print(b);  
    }  
}

public class Test {  
    public static void main(String[] args) {  
        B.printA();
        B.printB();
        System.out.print(B.a);  

        A a = new B();
        B b = new B();

        a.printB();
        b.printB();
        System.out.print(a.c);
        System.out.print(b.c);
    }  
}  

輸出結(jié)果:
1 4 3 2 4 33 44

如果子類中有相同名稱的靜態(tài)方法或變量父類的會(huì)被 隱藏 ,如果子類中存在同名的靜態(tài)方法或變量,則會(huì) 隱藏 父類中得靜態(tài)方法或變量,此時(shí)子類調(diào)用的就是子類中自己的靜態(tài)方法或變量;如果子類中不存在同名的靜態(tài)方法或變量,則會(huì)調(diào)用父類中的靜態(tài)方法或變量;父類調(diào)用的始終是其本身的靜態(tài)方法和變量。

2. 封裝:

封裝是把對(duì)象的屬性和操作結(jié)合為一個(gè)獨(dú)立的整體,隱藏對(duì)象內(nèi)部操作的實(shí)現(xiàn),用戶只需要通過(guò)其對(duì)外提供的方法來(lái)訪問(wèn)該對(duì)象,無(wú)需知道其內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。

優(yōu)點(diǎn):

  • 隱藏內(nèi)部實(shí)現(xiàn)細(xì)節(jié),提供公共訪問(wèn)方式
  • 類內(nèi)部可以自由修改不影響其調(diào)用者
  • 減少耦合度,提高安全性

3. 繼承:

繼承是一個(gè)對(duì)象獲取另一個(gè)對(duì)象屬性的過(guò)程,關(guān)鍵字為 extends 和 implements 。

1). IS-A關(guān)系(一個(gè)對(duì)象所屬于另一個(gè)對(duì)象):

方式一. 用extends來(lái)實(shí)現(xiàn)繼承:

public class Animal {
    public void eat() {
        System.out.println("Animal eating...");
    }
}

public class Mammal extends Animal {
    public void eat() {
        System.out.println("Mammal eating...");
    }
}

public class Dog extends Mammal {
    public void eat() {
        System.out.println("Dog eating...");
    }
}

方式二. 用implements來(lái)實(shí)現(xiàn)繼承:

public interface Animal {
    void eat();
}

public class Mammal extends Animal {
    public void eat() {
        System.out.println("Mammal eating...");
    }
}

public class Dog extends Mammal {
    public void eat() {
        System.out.println("Dog eating...");
    }
}

無(wú)論方式一還是方式二,我們都可以用instanceof關(guān)鍵字檢查得出:Mammal是一個(gè)Animal(哺乳動(dòng)物也是動(dòng)物);Dog既是一個(gè)Mammal,也是一個(gè)Animal(狗既是哺乳動(dòng)物也是動(dòng)物)。

public class Test {  
     /**
       * instanceof關(guān)鍵字檢查代碼
      */
    public static void main(String[] args) {
        Mammal m = new Mammal();
        Dog d = new Dog();
        System.out.print(m instanceof Animal);
        System.out.print(d instanceof Mammal);
        System.out.print(d instanceof Animal);
    }
}

輸出結(jié)果:
true true true

2). HAS-A關(guān)系(一個(gè)對(duì)象含有另一個(gè)對(duì)象的一些屬性):

public class Car{}

public class Speed{}

public class Benz extends Car{
    private Speed sp; 
}

Benz含有Spend屬性,但Benz不是Spend

4. 多態(tài):

實(shí)現(xiàn)多態(tài)的三個(gè)必要條件:繼承、重寫、父類引用指向子類對(duì)象。

1). 向上轉(zhuǎn)型:

我們實(shí)例化一個(gè)Dog對(duì)象可以用 Dog d = new Dog(); 我們也可以用 Animal d = new Dog(); ,后者就是向上轉(zhuǎn)型(父引用指向子對(duì)象),上面兩種方式創(chuàng)建出來(lái)的對(duì)象d,調(diào)用 d.eat(); 輸出的結(jié)果都是 Dog eating... ,這就體現(xiàn)出了java得多態(tài)。向上轉(zhuǎn)型創(chuàng)建的對(duì)象會(huì)遺失掉和父類不同的方法和變量(不能用來(lái)調(diào)用子類特有的方法和變量)。

2). 舉例說(shuō)明:

class A {
    public String show(D obj) {
        return ("A and D");
    }

    public String show(A obj) {
        return ("A and A");
    }
}

class B extends A {
    public String show(B obj) {
        return ("B and B");
    }

    public String show(A obj) {
        return ("B and A");
    }
}

class C extends B {}

class D extends B {}

class Test {
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();
        System.out.println(a1.show(b)); //  ①
        System.out.println(a1.show(c)); //  ②
        System.out.println(a1.show(d)); //  ③
        System.out.println(a2.show(b)); //  ④
        System.out.println(a2.show(c)); //  ⑤
        System.out.println(a2.show(d)); //  ⑥
        System.out.println(b.show(b));  //  ⑦
        System.out.println(b.show(c));  //  ⑧
        System.out.println(b.show(d));  //  ⑨
    }
}

輸出結(jié)果:
A and A    //  ①
A and A    //  ②
A and D    //  ③
B and A    //  ④
B and A    //  ⑤
A and D    //  ⑥
B and B    //  ⑦
B and B    //  ⑧
A and D    //  ⑨

前三個(gè)比較簡(jiǎn)單不容易出錯(cuò),看看下面幾個(gè):

  • ④:a2是A的引用指向B對(duì)象,向上轉(zhuǎn)型創(chuàng)建的對(duì)象會(huì)遺失掉和父類不同的方法和變量,所以a2只能調(diào)用 show(D obj) 、 show(A obj) 兩個(gè)方法,所以 a2.show(b) 應(yīng)該調(diào)用 show(A obj) 方法,B中重寫了該方法,所以運(yùn)行時(shí)JVM會(huì)調(diào)用B類中重寫的 show(A obj) 方法,所以輸出 B and A ;
  • ⑤: 原理同④;
  • ⑥: a2.show(d) 應(yīng)該調(diào)用 show(D obj) 方法,B中沒(méi)有重寫該方法所以調(diào)用的為A類中的該方法,所以輸出為 A and D ;
  • ⑦⑧⑨:b為B類對(duì)象,可調(diào)用A類中 show(D obj) 、B類中 show(B obj) 、B類中 show(A obj) 方法,所以輸出如上。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多