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

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

該程序無(wú)法使用子類而不是超類來(lái)運(yùn)行

該程序無(wú)法使用子類而不是超類來(lái)運(yùn)行

達(dá)令說(shuō) 2023-11-10 16:10:11
有一個(gè)類Datacenter,其構(gòu)造函數(shù)是:public Datacenter(        String name,        DatacenterCharacteristics characteristics,        VmAllocationPolicy vmAllocationPolicy,        List<Storage> storageList,        double schedulingInterval) throws Exception {    super(name);    setCharacteristics(characteristics);    setVmAllocationPolicy(vmAllocationPolicy);    setLastProcessTime(0.0);    setStorageList(storageList);    setVmList(new ArrayList<Vm>());    setSchedulingInterval(schedulingInterval);    for (Host host : getCharacteristics().getHostList()) {        host.setDatacenter(this);    }    // If this resource doesn't have any PEs then no useful at all    if (getCharacteristics().getNumberOfPes() == 0) {                throw new Exception(super.getName()                    + " : Error - this entity has no PEs. Therefore, can't process any Cloudlets.");    }    // stores id of this class    getCharacteristics().setId(super.getId());}我們使用這個(gè)類在程序中創(chuàng)建數(shù)據(jù)中心:private static Datacenter createDatacenter(String name, LinkedList myHarddriveList, double timeZone) {    /* Additional codes like defining Hots */    Datacenter datacenter = null;    try {        datacenter = new Datacenter(name, characteristics,                             new VmAllocationPolicySimple(hostList), myHarddriveList, 0);    } catch (Exception e) {                System.out.println("Error: " + e);    }    return datacenter;}程序運(yùn)行結(jié)果如下:?jiǎn)栴}是,如果我通過(guò)擴(kuò)展Datacenter類來(lái)定義自己的數(shù)據(jù)中心,程序?qū)o(wú)法工作。我將MyDatacenter類定義如下:public class MyDatacenter extends Datacenter{    /* My own variables */    public MyDatacenter(String name,            DatacenterCharacteristics characteristics,            VmAllocationPolicy vmAllocationPolicy,           List<Storage> storageList,            double schedulingInterval) throws Exception {        super(name,                 characteristics,                 vmAllocationPolicy,                storageList,                 schedulingInterval);    }    /* My own mwthods */}
查看完整描述

2 回答

?
臨摹微笑

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

根據(jù)對(duì)您問(wèn)題的評(píng)論,問(wèn)題似乎是您重寫(xiě)了諸如 等方法setCharacteristics(...)并setSchedulingInterval(...)在超級(jí)構(gòu)造函數(shù)中調(diào)用這些方法。


如果不了解更多有關(guān)系統(tǒng)正在做什么以及重寫(xiě)這些方法如何影響應(yīng)用程序內(nèi)部工作的信息,就很難給出您可能面臨的問(wèn)題的確切示例。因此,我將嘗試提供一個(gè)更抽象的示例,并希望我能夠傳達(dá)可能出現(xiàn)問(wèn)題的想法。


假設(shè)我們有以下課程:


class SuperType {

  protected String name;


  public SuperType(String n) {

    setName( n );

  }


  protected void setName( String n ) {

    name = n;

  }    

}


class SubType extends SuperType {

  // setting 'id' happens here

  private int id = new Random().nextInt() + 1;


  {

    // initializer block, setting 'id' could happen here       

  }


  public SubType( String n ) {

    super( n ); 

    // setting 'id' could happen here as well

  }


  @Override

  protected void setName( String n ) {

    name = n + " " + id;

  }    

}

正如您所看到的,重寫(xiě)了構(gòu)造函數(shù)中使用的SubType方法。為什么這是一個(gè)問(wèn)題?setName(...)SuperType

考慮調(diào)用時(shí)初始化發(fā)生的順序new SubType("some name")

  • 構(gòu)造函數(shù)SubType(...)調(diào)用超級(jí)構(gòu)造函數(shù),即SuperType(...)

  • 在執(zhí)行構(gòu)造函數(shù)之前,將創(chuàng)建并初始化實(shí)例。
    對(duì)于層次結(jié)構(gòu)中的每個(gè)類,從上到下(從超級(jí)類型到子類型),這種情況按以下順序發(fā)生

    • 字段按照列出的順序排列

    • 初始化塊按照列出的順序排列

    • constructor

因此,我們的示例中有以下執(zhí)行順序(Object為了簡(jiǎn)單起見(jiàn),我將保留不存在的初始化)

  • SuperType(...)構(gòu)造函數(shù)(因?yàn)闆](méi)有初始化塊)

  • setName(...)正在被調(diào)用,但這是被覆蓋的版本

  • SubType字段被初始化,設(shè)置id為隨機(jī)數(shù)

  • SubType初始化塊運(yùn)行

  • SubType(...)構(gòu)造函數(shù)運(yùn)行

正如您所看到的,重寫(xiě)setName(...)是在id初始化之前執(zhí)行的,因此該方法將看到的所有內(nèi)容都將是其默認(rèn)值(對(duì)于primitive 為0 int)。并且根據(jù)您的應(yīng)用程序可能會(huì)出現(xiàn)問(wèn)題 - 重寫(xiě)的方法可能依賴于正確初始化的一些附加變量(例如不為空),如果沒(méi)有發(fā)生這種情況,實(shí)例可能仍然會(huì)被創(chuàng)建,但無(wú)法從您的應(yīng)用程序中使用觀點(diǎn)看法。


查看完整回答
反對(duì) 回復(fù) 2023-11-10
?
慕容3067478

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

當(dāng)你有類似的事情時(shí):


Datacenter d = new MyDatacanter(...);

唯一可訪問(wèn)的方法d是超類中定義的方法Datacenter,除非您將其轉(zhuǎn)換d為MyDatacenter對(duì)象:


d.yourCustomMethod(); //won't work

((MyDataCenter) d).yourCustomMethod(); //should work fine


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

添加回答

舉報(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)