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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如果一個(gè)抽象類不能被實(shí)例化,為什么下面的可能呢?

如果一個(gè)抽象類不能被實(shí)例化,為什么下面的可能呢?

紅顏莎娜 2023-03-09 10:45:31
在下面的代碼中,一個(gè) Graphics 對(duì)象被傳遞到下面的 paintComponent 方法中,然后它被轉(zhuǎn)換成一個(gè) Graphics2D 對(duì)象。Graphics 不是一個(gè)抽象類嗎,那么為什么可能出現(xiàn)以下情況? public void paintComponent(Graphics comp) { Graphics2D comp2D = (Graphics2D) comp; Font font = new Font("Comic Sans", Font.BOLD, 15); comp2D.setFont(font); comp2D.drawString("Potrzebie!", 5, 50);}
查看完整描述

2 回答

?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

僅僅因?yàn)橐粋€(gè)類不能被實(shí)例化并不意味著你不能得到它的一個(gè)實(shí)例。


在您的示例中,您所做的只是將其轉(zhuǎn)換為 Graphics 層次結(jié)構(gòu)中的另一個(gè)類。


這是一個(gè)例子。



    public class AbstractDemo {


       public static void main(String[] args) {

          Concrete c = new Concrete();

          AClass a = (AClass) c;

          a.me();

       }


    }


    abstract class AClass {

       public void me() {

          System.out.println("Abstract parent");

       }

    }


    class Concrete extends AClass {


    }


查看完整回答
反對(duì) 回復(fù) 2023-03-09
?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

一個(gè)類是抽象的只是意味著你不能直接創(chuàng)建這樣一個(gè)類。一旦有了這樣的類,就可以對(duì)其進(jìn)行強(qiáng)制轉(zhuǎn)換,使其看起來(lái)像是它的任何子類。換句話說(shuō),所有“抽象”意味著你不能做:


SomeAbstractClass obj = new SomeAbstractClass(...);

你可以引用一個(gè)Graphics2D對(duì)象,就像你的例子一樣,但是如果你要求 Java 告訴你對(duì)象的真實(shí)類型,它實(shí)際上永遠(yuǎn)不會(huì)是一個(gè)Graphics2D對(duì)象。從這段代碼中,您不能確定所討論對(duì)象的真實(shí)類型也是一個(gè)Graphics對(duì)象。這可能再次是對(duì)真實(shí)對(duì)象的子類的引用,例如 maybeMyGraphicsObject或類似的東西。


這就是多態(tài)性的全部意義和威力。一旦你創(chuàng)建了一個(gè)對(duì)象,它的行為就像它的任何子類一樣,并且可以通過(guò)向上轉(zhuǎn)換將它視為任何這些子類的純實(shí)例。


下面是一些代碼,指出向上轉(zhuǎn)型的對(duì)象的標(biāo)識(shí)會(huì)發(fā)生什么:


abstract class Abstract {

    public void whatAmI() {

        System.out.println("I'm Abstract");

    }

}


class Concrete extends Abstract {

    @Override

    public void whatAmI() {

        System.out.println("I'm Concrete");

    }

}


public class X {


    public static void main(String[] args) {


        // This won't compile.  That's what it means for "Abstract" to be abstract.

        // Abstract abs = new Abstract();


        // You can create a Concrete, and then upcast it to an Abstract reference...

        Concrete concrete = new Concrete();

        Abstract abs = (Abstract)concrete;


        // But it's stll really a Concrete

        System.out.println(abs.getClass().getName());


        // And it will still act like a Concrete if Concrete has overridden one of Abstract's methods.

        abs.whatAmI();

    }

}

結(jié)果:


org.littleshoot.proxy.inlet.Concrete

I'm Concrete

請(qǐng)注意,如果您向 Java 詢問(wèn)對(duì)象的類型,即使您已經(jīng)通過(guò)抽象引用詢問(wèn)了對(duì)象的類型,它仍然是具體的。另請(qǐng)注意,如果您在抽象類上調(diào)用已在具體中被覆蓋的方法,則將調(diào)用具體的版本。


查看完整回答
反對(duì) 回復(fù) 2023-03-09
  • 2 回答
  • 0 關(guān)注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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