第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么父子關(guān)系中的int和Integer總是在java中打印int?

為什么父子關(guān)系中的int和Integer總是在java中打印int?

慕村225694 2021-04-09 14:15:41
我正在嘗試在下面的代碼片段中打印Integer值,但是每次它都會打印int塊時。為什么會這樣呢?class A {    void methodOne(int i) {        System.out.println("int " + i);    }}class B extends A {    void methodOne(Integer i) {        System.out.println("Integer " + i);    }}public class Solution {    public static void main(String[] args) {        A a = new B();        a.methodOne(10);        a.methodOne(new Integer(10));        B b = new B();        b.methodOne(20);    }}輸出:int 10int 10int 20為什么總是打印int而不是整數(shù)?
查看完整描述

3 回答

?
藍山帝景

TA貢獻1843條經(jīng)驗 獲得超7個贊

您的問題有一個簡單的答案。在解決方案之后,我將說明每種情況下的輸出。在此之前,有關(guān)您的代碼段的一些注意事項:


隨著類的B擴展A,并且具有methodOne具有不同類型的parameter(Integer)的相同方法,它具有method的兩個重載版本methodOne。

A a = new B();這里a是B和類型的實例A。

理由:


a.methodOne(10):參數(shù)的類型10為int。這樣void methodOne(int i)的類A被調(diào)用。

a.methodOne(new Integer(10)):參數(shù)的類型new Integer(10)為,Integer但methodOne(Integer i)子類中的方法對者B不可見a。因此new Integer(10)取消裝箱int 10并再次調(diào)用void methodOne(int i)class A。

b.methodOne(20):作為b的實例B,它具有method的兩個版本methodOne。但是參數(shù)的類型10是int,因此又調(diào)用void methodOne(int i)了類A(其父類)。

解決方案:


B b = new B();

b.methodOne(new Integer(20));

此處,參數(shù)的類型20為Integer。因此void methodOne(Integer i),B將調(diào)用class的。


這是一個小實驗,可以幫助您了解父類中子類方法的不可見性。在類B中放置一個偽方法,并嘗試使用類型為的對象A但類型為的實例B進行訪問。以下是修改后的代碼。


// Place this method in Class B

void test(){


}


//In the main method

A a = new B();

// a.test();  

// The test method will not be available in class `A`, though the instantation of `a` is of type `B`.



查看完整回答
反對 回復(fù) 2021-04-18
?
白板的微信

TA貢獻1883條經(jīng)驗 獲得超3個贊

該行為與自動裝箱和自動拆箱有關(guān)。有了這個線常見的兩種情況下,請注意,這個例子是不相關(guān)的方法覆蓋。


A a = new B();

a.methodOne(10); /* line 1 */

a.methodOne(new Integer(10)); /* line 2 */

B b = new B();

b.methodOne(20); /* line 3 */

b.methodOne(new Integer(20)); /* line 4 */

方案1:


class A {

    void methodOne(Integer i) {

        System.out.println("Integer " + i);

    }

}


class B extends A {

    void methodOne(int i) {

        System.out.println("int " + i);

    }

}

輸出


Integer 10 /* line 1, [AutoBoxing] */

Integer 10 /* line 2 */

int 20     /* line 3, B has method(int) */

Integer 20 /* line 4, B has method(Integer) */

方案2


class A {

    void methodOne(int i) {

        System.out.println("int " + i);

    }

}


class B extends A {

    void methodOne(Integer i) {

        System.out.println("Integer " + i);

    } 

}

輸出


int 10     /* line 1 */

int 10     /* line 2, [auto unboxing] */

int 20     /* line 3 */

Integer 20 /* line 4 */


查看完整回答
反對 回復(fù) 2021-04-18
?
ABOUTYOU

TA貢獻1812條經(jīng)驗 獲得超5個贊

class A {

    void methodOne(Integer i) {

        System.out.println("Integer " + i);

    }

}


class B extends A {

    void methodOne(int i) {

        System.out.println("int " + i);

    }

}


public class Solution {

    public static void main(String[] args) {

        A a = new B();

        a.methodOne(10);

        a.methodOne(10);

        B b = new B();

        b.methodOne(20);

    }

}


查看完整回答
反對 回復(fù) 2021-04-18
  • 3 回答
  • 0 關(guān)注
  • 222 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號