成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java筆記 - 重寫/重載,向上轉(zhuǎn)型/向下轉(zhuǎn)型

qqlcbb / 1087人閱讀

摘要:所以靜態(tài)方法不能被覆蓋。雖然就算你重寫靜態(tài)方法,編譯器也不會報錯。也就是說,如果你試圖重寫靜態(tài)方法,不會阻止你這么做,但你卻得不到預(yù)期的結(jié)果重寫僅對非靜態(tài)方法有用。我們應(yīng)該直接使用類名來訪問靜態(tài)方法,而不要使用對象引用來訪問。

重寫/重載

重寫指的是根據(jù)運行時對象的類型來決定調(diào)用哪個方法,而不是根據(jù)編譯時的類型。所以靜態(tài)方法不能被覆蓋。

(如果從重寫方法會有什么特點來看,我們是不能重寫靜態(tài)方法的。雖然就算你重寫靜態(tài)方法,編譯器也不會報錯。也就是說,如果你試圖重寫靜態(tài)方法,Java 不會阻止你這么做,但你卻得不到預(yù)期的結(jié)果(重寫僅對非靜態(tài)方法有用)。重寫指的是根據(jù)運行時對象的類型來決定調(diào)用哪個方法,而不是根據(jù)編譯時的類型。讓我們猜一猜為什么靜態(tài)方法是比較特殊的?因為它們是類的方法,所以它們在編譯階段就使用編譯出來的類型進行綁定了。使用對象引用來訪問靜態(tài)方法只是 Java 設(shè)計者給程序員的自由。我們應(yīng)該直接使用類名來訪問靜態(tài)方法,而不要使用對象引用來訪問。)

向上轉(zhuǎn)型/向下轉(zhuǎn)型

assume 兩個類 Base 類 和 Agg 類,Agg 繼承與 Base .
and 一個原則:父類引用指向子類對象,子類引用不能指向父類對象(不安全)。

1 向上轉(zhuǎn)型
javaBase f1 = new Agg (); 父類引用指向子類對象

左邊叫 生成一個父類引用Father f1
右邊叫 生成一個子類對象new Son() f1 引用指向了內(nèi)存堆中Son對象。
把子類對象直接賦給父類的引用叫向上轉(zhuǎn)型,向上轉(zhuǎn)型不用強制轉(zhuǎn)換。向上轉(zhuǎn)型就是父類引用指向子類對象,這里誰指向誰記著不方便,一個簡單的記憶方法是 A a = new B(); 可以想象一個箭頭 A a => new B(); namely, A 指向 B.

javaclass Base{
    public String getField(){
        String name = "Base";
            return name;
    }
}
class Agg extends Base{
    public String getField(){
        String name = "Agg";
            return name;
    }
}
javapublic class test {
    public static void main(String[] args) {
        Base a = new Agg();
        System.out.println(""+a.getField());
    }
}

output: Agg
動態(tài)綁定,覆蓋了父類的函數(shù)
當我們調(diào)用a的方法的時候,我們會首先看看a對應(yīng)的類有沒有這個方法, 如果有并且被子類覆蓋,這邊就會調(diào)用子類的方法。

javaclass Base{}
class Agg extends Base{
    public String getField(){
        String name = "Agg";
        return name;
    }
}
public class test {
    public static void main(String[] args) {
        Base a = new Agg();
        System.out.println(""+ ((Agg)a).getField());
    }
}

output: Agg.
如果沒有,編譯器就認為Base沒有這個函數(shù),直接調(diào)用就會報錯 (從這里也能看出向上轉(zhuǎn)型會丟掉子類的一些信息)。
這時候吧a轉(zhuǎn)換成Agg類型的對象,編譯器就認為a是一個Agg 類型。可以調(diào)用Agg類的函數(shù)。

javaclass Base{
    public String getField(){
        String name = "Base";
        return name;
    }
}
class Agg extends Base{
    public String getField(){
        String name = "Agg";
            return name;
    }
}
public class test {
    public static void main(String[] args) {
        Agg b = new Agg();
        Base a =  (Base)b; 向上轉(zhuǎn)型的另一個寫法
        System.out.println(""+a.getField());
    }
}

output: Agg
這道題是向上轉(zhuǎn)型的另一個寫法.

java
class Base{ public static String getField(){ String name = "Base"; return name; } } class Agg extends Base{ public static String getField(){ String name = "Agg"; return name; } } public class test { public static void main(String[] args) { Agg a = new Agg(); Base b = new Agg(); System.out.println(""+a.getField()); System.out.println(""+b.getField()); } }

output : Agg Base
靜態(tài)函數(shù)不能覆蓋

2 向下轉(zhuǎn)型
javaSon s1 = (Son)f1;

把指向子類對象的父類引用,賦給子類引用叫向下轉(zhuǎn)型,要強制轉(zhuǎn)換。

javaFather f2 = new Father();
Son s1 = (Son)f2; //編譯出錯,子類引用不能指向父類對象

javaclass Base{
    public String getField(){
        String name = "Base";
            return name;
    }
}
class Agg extends Base{
    public String getField(){
        String name = "Agg";
            return name;
    }
}
public class test {
    public static void main(String[] args) {
        Base a = new Base();
        Agg b = (Agg)a;  不會編譯通過,這樣向下轉(zhuǎn)型不可以,不安全。
        System.out.println(""+b.getField());
    }
}

向下轉(zhuǎn)型:當比較對象的時候,向下轉(zhuǎn)型是很有用的。
那應(yīng)該如何安全的向下轉(zhuǎn)型?
先向上 - 再向下

javaBase b = new Agg(); 先向上
Agg a= (Agg)b; 再向下

再貼一個向下轉(zhuǎn)型實際應(yīng)用場景的代碼,比較對象:

javapublic class Person
{
  private String name;
  private int age;

  public boolean equals(Object anObject)
  {
     if (anObject == null)
         return false;

     /* The object being passed in is checked
         to see it"s class type which is then compared
         to the class type of the current class.  If they
         are not equal then it returns false
     */

     else if (getClass( ) != anObject.getClass())
         return false;

     else
     {
        /* 
         this is a downcast since the Object class
         is always at the very top of the inheritance tree
         and all classes derive either directly or indirectly 
         from Object:
        */
        Person aPerson = (Person) anObject;
        return ( name.equals(aPerson.name) 
                && (age == aPerson.age));
     }
  }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64269.html

相關(guān)文章

  • 1、接口 2、多態(tài)

    摘要:接口的概念接口的概念接口是功能的集合,同樣可看做是一種數(shù)據(jù)類型,是比抽象類更為抽象的類。多態(tài)的前提是必須有子父類關(guān)系或者類實現(xiàn)接口關(guān)系,否則無法完成多態(tài)。 01接口的概念 * A:接口的概念 接口是功能的集合,同樣可看做是一種數(shù)據(jù)類型,是比抽象類更為抽象的類。 接口只描述所應(yīng)該具備的方法,并沒有具體實現(xiàn),具體的實現(xiàn)由接口的實現(xiàn)類(相當于接口的子類)來完成。這樣將功能的定...

    Magicer 評論0 收藏0
  • 9. java 多態(tài)

    摘要:概念所謂多態(tài),就是指一個引用變量類型在不同的情況下的多種狀態(tài)。需進行強制轉(zhuǎn)換有風險,最好使用進行判斷。繼承在多態(tài)中必須存在有繼承關(guān)系的子類和父類。在中有兩種形式可以實現(xiàn)多態(tài)繼承和接口。 概念 所謂多態(tài),就是指一個引用變量(類型)在不同的情況下的多種狀態(tài)。也可以理解為,多態(tài)是指通過指向父類的指針,來調(diào)用在不同子類中實現(xiàn)的方法。多態(tài)性是對象多種表現(xiàn)形式的體現(xiàn) 多態(tài)性嚴格來說有兩種描述形式:...

    wanglu1209 評論0 收藏0
  • 面向?qū)ο蠼涌诙鄳B(tài)

    摘要:多態(tài)的前提是必須有子父類關(guān)系或者類實現(xiàn)接口關(guān)系,否則無法完成多態(tài)。具體格式如下父類引用指向子類對象就是多態(tài)的定義格式。多態(tài)的轉(zhuǎn)型分為向上轉(zhuǎn)型與向下轉(zhuǎn)型兩種向上轉(zhuǎn)型當有子類對象賦值給一個父類引用時,便是向上轉(zhuǎn)型,多態(tài)本身就是向上轉(zhuǎn)型的過程。 第3天 面向?qū)ο?今日內(nèi)容介紹? 接口? 多態(tài)? 筆記本案例今日學習目標? 寫出定義接口的格式? 寫出實現(xiàn)接口的格式?...

    wangdai 評論0 收藏0
  • 向上轉(zhuǎn)型讀書筆記

    摘要:把這種對某個對象的引用視為對其基類的引用的做法被稱作向上轉(zhuǎn)型?;蛘呃^承或者重寫了的問題從子類向上轉(zhuǎn)型到父類,可能會縮小接口。因為向上轉(zhuǎn)型之后使用引用進行訪問,只能訪問父類定義的接口,而不能訪問自己定義的新接口。 preliminary 最近在讀Thinking in Java這篇是一個基本此書的整理。 什么是向上轉(zhuǎn)型upcast? 對象既可以作為它本身的類型使用,也可以作為它的基類...

    RdouTyping 評論0 收藏0
  • Java編程思想》筆記8.多態(tài)

    摘要:多態(tài)的作用是消除類型之間的耦合關(guān)系。編寫構(gòu)造器準則用盡可能簡單的方法使對象進入正常狀態(tài),如果可以的話,避免調(diào)用其他方法。 點擊進入我的博客 在面向?qū)ο蟮某绦蛟O(shè)計語言中,多態(tài)是繼數(shù)據(jù)抽象(封裝)和繼承之后的第三種基本特征。多態(tài)通過分離做什么和怎么做,從另一角度將接口和實現(xiàn)分離開來。多態(tài)的作用是消除類型之間的耦合關(guān)系。 8.1 再論向上轉(zhuǎn)型 對象既可以作為它自己的本類使用,也可以作為它的...

    chinafgj 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<