簡體   English   中英

java中的新關鍵字

[英]new keyword in java

java新手,仍然在努力使用新的關鍵字和繼承:

public class A1 {
    void a_method (){
        System.out.println("Inside A1 method");
    }
}

public class A2 extends A1{
    void a_method(){
        System.out.println("Inside A2 method");
    }
}

public class TestA1A2 {

    public static void main(String[] args) {

        A1 a1 = new A1();
        A1 a2 = new A2();  //not sure if it created object of A1 or A2
        A2 a3 = new A2();

        a1.a_method();
        a2.a_method();
        a3.a_method();

    }
}

我正在努力理解新關鍵字,如果在上面的代碼中:

A1 a2 = new A2();  //not sure if it created object of A1 or A2

將a2作為A1或A2的對象? 從輸出我可以看到它調用A2的方法,但我真的沒有得到新的關鍵字。 並且當A2延伸A1時,是否可以調用A1的方法?

A1 a2 = new A2(); 

此代碼創建一個A2對象,但您只能使用a2訪問A1類的方法。 如果A2中的方法被覆蓋,則調用A2的方法。

你創建了一個新的A2()對象,因為你說'new A2()'。 由於A2也是A1,你可以像它的A1一樣引用它:

A1 a1 = new A2();
A2 a2 = new A2();

在上面的例子中,在a1中,你可以在a1上調用A1的所有方法。 對於a2,你可以調用a1和a2的所有方法,因為你繼承了A1的方法。

A1 a2 = new A2(); 這將創建A2類型的對象。

這里發生了什么......

您正在創建A2類型的對象並指定類型A1的引用。 當你執行新的A2()時,它將調用構造函數A2() (它是默認構造函數)並創建一個A2類型的Object。

public class A2 extends A1{
     public A2(){
       super();
     }

    void a_method(){
        System.out.println("Inside A2 method");
    }
}

由於A2延伸A1A2 A1 它是A1特殊類型 這是A1一切,但A2可能有一些獨特之處。 一個類比就是貓是一種哺乳動物。 在Java中, Cat會擴展Mammal

A1 a2 = new A2();

由於new A2()此行創建A2的實例。 然而,這里的棘手的一點是,展望未來,它會像一個待處理A1 ,因為A1 a2 = 讓我從線上刪除一點點噪音:

A1 xx = new A2();

這完全相同,但生成的對象稱為xx 因此,我們正在創建一個A2類的實例,我們將其稱為xx ,並且繼續前進,我們將它視為A1

A1是A2的父類,

A1 a2 = new A2();

創建其父類為A1的A2實例。 但由於A2繼承自A1,a2也是A1。

這稱為多態性 由於A2延伸A1 ,你可以聲明A1A2 ,並且會給您可以訪問所有的內部非重寫的方法A1和所有被覆蓋的A1內部方法A2 (順便說一句它的一個很好的做法,以使用@Override注釋,當你重寫) 。

在這種情況下,由於A2覆蓋a_method()當你做a2.a_method()你會被訪問A2's版本a_method()

來自javadoc的解釋:

多態性的字典定義是指生物學中的原理,其中生物體或物種可以具有許多不同的形式或階段。 這個原則也可以應用於面向對象的編程和Java語言之類的語言。 類的子類可以定義它們自己的唯一行為,但仍然共享父類的一些相同功能。

當您從Java繼承類時,繼承的類被稱為超類。 把它想象成更普通的課程。 繼承的類更專業。

A1 a2 = new A2();

在這種情況下,a2(類型A1)是通用類,通過操作,您可以使用A2中定義的更專用的類型

A2對象也是 (擴展) A1對象。 所以你可以用它作為A2 A1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM