2

Resident クラスから Person クラス コンストラクターを呼び出そうとしています。

人:

public class Person
{
    private String name;
    private String surname;
    private String address1;
    private String address2;
    private String telephone;
    private String faxNumber;

    Person(String aName, String aSurname, String aAddress1, String aAddress2, String aTelephone, String aFaxNumber)
    {
        name = aName;
        surname = aSurname;
        address1 = aAddress1;
        address2 = aAddress2;
        telephone = aTelephone;
        faxNumber = aFaxNumber;
    }

居住者:

public class Resident : Person
{
    private String IDNumberPrim;
    private String IDNumberSec1;
    private String IDNumberSec2;
    private String IDNumberSec3;
    private String IDNumberSec4;
    private String tempID;
    private String passportNumber;


    Resident(String aIDNumberPrim, String aIDNumberSec1, String aIDNumberSec2, String aIDNumberSec3, String aIDNumberSec4, String aTempId, String aPassportNumber)

base コマンドを試しましたが、うまくいきません。

助けてください!!!

- - - - - - アップデート - - - - - - - -

問題が解決しました。

すべての助けと提案をありがとう

4

5 に答える 5

6

アクセス修飾子privateが含まれていないため、現在、コンストラクターは両方ともデフォルトで設定されています。コンストラクターがプライベートで、クラスが分離している (つまり、Jon Skeet が説明するようにネストされていない)場合、コンストラクターから継承していても、コンストラクターの可視性はありません。PersonResidentPerson

publicprotectedまたはのような修飾子をそれらに追加するだけinternalです。

protected Person(

base次に、通常どおり呼び出すことができます。

public Resident() 
    : base() 
{
}
于 2012-07-30T14:22:24.110 に答える
3

base コマンドを試しましたが、うまくいきません。

これは実際には「コマンド」ではありませんが、確実に機能します。

Resident(String aIDNumberPrim, String aIDNumberSec1,String aIDNumberSec2,
         String aIDNumberSec3, String aIDNumberSec4, String aTempId,
         String aPassportNumber)
    : base(...)
{
}

確かに、名前やアドレスなどを示すパラメータがないように見えるため、ここで何を渡すかは明確ではありません...おそらく、さらにパラメータを追加する必要がありますか?

編集: また、Adam が指摘したように、が 内でネストされた型として宣言されていPersonない限り、コンストラクターの可視性を高める必要があります。のプログラム テキスト内でのみ呼び出す必要がある場合は、コンストラクターをプライベートのままにしてもかまいませんが、その可視性も高めたいと思う可能性が高くなります。ResidentPersonResidentResident

(ちなみに、これらのパラメーター名は恐ろしいものです。なぜすべてにプレフィックスを付けるのaですか?)

于 2012-07-30T14:22:11.087 に答える
0

publicアクセスをパブリックにしたい場合は、コンストラクターのキーワードを追加する必要があります。

public Person(String aName, String aSurname, String aAddress1,
              String aAddress2, String aTelephone, String aFaxNumber)
{
    ...
}

internalそれらが同じプロジェクト上にある場合、または一方が他方のベースであるためなどを使用することもできますがprotected、それはすべて、ctor の修飾子に実際にアクセスしたいものに依存します。

デフォルトのアクセス修飾子はprivateで、そのクラスの外部からのアクセスは許可されません。

于 2012-07-30T14:23:09.400 に答える
0

私の意見では、それはうまくいくはずです:

public class Person
{
    private String name;
    private String surname;
    private String address1;
    private String address2;
    private String telephone;
    private String faxNumber;

    public Person(String aName, String aSurname, String aAddress1, String aAddress2, String aTelephone, String aFaxNumber)
    {
        name = aName;
        surname = aSurname;
        address1 = aAddress1;
        address2 = aAddress2;
        telephone = aTelephone;
        faxNumber = aFaxNumber;
    }

public class Resident : Person
{
    private String IDNumberPrim;
    private String IDNumberSec1;
    private String IDNumberSec2;
    private String IDNumberSec3;
    private String IDNumberSec4;
    private String tempID;
    private String passportNumber;


    Resident(String aIDNumberPrim, String aIDNumberSec1, String aIDNumberSec2, String aIDNumberSec3, String aIDNumberSec4, String aTempId, String aPassportNumber) : base(...)

よろしく、プロ

于 2012-07-30T14:26:17.027 に答える
0

Resident のコンストラクターのパラメーター リストの閉じ括弧の後に、中括弧の前に ': Person(...)' と言ってみて、'...' で適切なパラメーターを指定します。

Resident(String aName, String aSurname, String aAddress1, String aAddress2, String aTelephone, String aFaxNumber,
    String aIDNumberPrim, String aIDNumberSec1, String aIDNumberSec2, String aIDNumberSec3, String aIDNumberSec4, String aTempId, String aPassportNumber) 
: Person (aName, aSurname, aAddress1, aAddress2, aTelephone, aFaxNumber)
{

}
于 2012-07-30T14:30:37.027 に答える