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

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

Java構造器繼承

Java構造器繼承

素胚勾勒不出你 2019-12-18 17:13:39
Java構造器繼承我想知道為什么在java構造函數(shù)中沒有繼承?你知道當你有這樣一堂課的時候:public class Super {   public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){     this.serviceA = serviceA;     //etc   } }稍后,當您繼承Super,java會抱怨沒有定義默認構造函數(shù)。解決方案顯然是這樣的:public class Son extends Super{   public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){     super(serviceA,serviceB,serviceC);   }}這個代碼是重復的,不是干的和無用的(IMHO).因此,這再次提出了一個問題:為什么java不支持構造函數(shù)繼承?不允許這種繼承有什么好處嗎?
查看完整描述

3 回答

?
斯蒂芬大帝

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

假設構造函數(shù)都是遺傳的.。因為每個類最終都是從對象派生出來的,每一,每個類將以無參數(shù)構造函數(shù)結束。餿主意。你到底期望什么:

FileInputStream stream = new FileInputStream();

去做?

現(xiàn)在可能有一種方法可以輕松地創(chuàng)建“通過”構造函數(shù),這是相當常見的,但我不認為它應該是默認的。構造子類所需的參數(shù)通常與超類所需的參數(shù)不同。



查看完整回答
反對 回復 2019-12-19
?
拉丁的傳說

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

當你從超級繼承時,這就是現(xiàn)實中發(fā)生的事情:

public class Son extends Super{

  // If you dont declare a constructor of any type, adefault one will appear.
  public Son(){
    // If you dont call any other constructor in the first line a call to super() will be placed instead.
    super();
  }}

所以,這就是原因,因為你必須調(diào)用你唯一的構造函數(shù),因為“Super”沒有默認的構造函數(shù)。

現(xiàn)在,嘗試猜測為什么Java不支持構造函數(shù)繼承,可能是因為構造函數(shù)只有在討論具體實例時才有意義,而且當您不知道如何(通過多態(tài))定義某物的實例時,您不應該能夠創(chuàng)建它的實例。



查看完整回答
反對 回復 2019-12-19
?
大話西游666

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

因為構建子類對象的方式可能與構建超類的方式不同。您可能不希望子類的客戶端能夠調(diào)用超類中可用的某些構造函數(shù)。

一個愚蠢的例子:

class Super {
    protected final Number value;
    public Super(Number value){
        this.value = value;
    }}class Sub {
    public Sub(){ super(Integer.valueOf(0)); }
    void doSomeStuff(){
        // We know this.value is an Integer, so it's safe to cast.
        doSomethingWithAnInteger((Integer)this.value);
    }}// Client code:Sub s = new Sub(Long.valueOf(666L)):
     // Devilish invocation of Super constructor!s.doSomeStuff(); 
    // throws ClassCastException

或者更簡單:

class Super {
    private final String msg;
    Super(String msg){
        if (msg == null) throw new NullPointerException();
        this.msg = msg;
    }}class Sub {
    private final String detail;
    Sub(String msg, String detail){
        super(msg);
        if (detail == null) throw new NullPointerException();
        this.detail = detail;
    }
    void print(){
        // detail is never null, so this method won't fail
        System.out.println(detail.concat(": ").concat(msg));
    }}// Client code:Sub s = new Sub("message");
     // Calling Super constructor - detail is never initialized!s.print();
      // throws NullPointerException

從本例中可以看出,您需要某種方式聲明“我想繼承這些構造函數(shù)”或“我想繼承除這些構造函數(shù)之外的所有構造函數(shù)”,然后還必須指定默認構造函數(shù)繼承首選項,以防有人在超類中添加新構造函數(shù).或者,如果您想要“繼承”它們,那么只需要從超類中重復構造函數(shù),這可以說是更明顯的方法。




查看完整回答
反對 回復 2019-12-19
  • 3 回答
  • 0 關注
  • 285 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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