2012-06-06 135 views
0

我只是想知道如果這段代碼是正確的,我發現在一些信息。我覺得奇怪的是,這兩個例子都使用了兩次直徑,這真的是正確的嗎?關於繼承和構造函數

public Ellipse(double diameter): base(diameter, diameter) 
+0

爲什麼你覺得它很奇怪?什麼是基類? – leppie

+0

大概它只是說「一個默認的橢圓是一個圓圈」 - 我猜是有第二個構造函數需要兩個參數。 –

+0

爲什麼downvote我qustion?我只是覺得奇怪的是,有兩個'直徑',我想到的不是兩個同名的公共字段,但現在當我看到你的代碼時,它更好地理解它,並且可以有一個'直徑'兩次。 –

回答

2

語法無誤。這些班可能看起來像這樣:

public class Base 
{ 
    public Base(double d1, double d2) 
    { 
    } 
} 

public Eclipse : Base 
{ 
    public Ellipse(double diameter) 
     : base(diameter, diameter) 
    { 
    } 
} 
2

這是一個Ellipse類的構造函數,它調用基類的構造,其具有兩個參數。

它可能是這個樣子:

class Shape 
{ 
public Shape(double diameter1, double diameter2) 
{ 
} 
} 
class Ellipse : Shape 
{ 
public Ellipse(double diameter) : base(diameter, diameter) 
{ 
} 
} 

如果你new Ellipse(10); 10傳遞到橢圓形構造,它調用Shape類的構造函數,並傳遞10作爲論據,這兩個PARAMS。

1

這取決於基類構造函數對參數做了什麼,但在語法上,它是正確的。

您發佈的代碼調用與提供的參數(而不是默認的基類構造函數)匹配的基類構造函數(如果有的話)。

1

這是構造函數鏈,即在子構造函數之前調用基構造函數。

如果基類有像

public Base(double, double) 

構造則是完全沒有問題。