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)

我已经尝试过基本命令,但它从来没有用过。

请帮忙!!!

- - - - - - 更新 - - - - - - - -

问题解决了。

感谢所有的帮助和建议

4

5 回答 5

6

目前,您的构造函数都默认为,private因为您没有包含访问修饰符。如果Person构造函数是私有的并且Resident类是独立的(即,没有Person像 Jon Skeet 解释的那样嵌套),即使它是从它继承的,它也不具有构造函数的可见性。

只需为它们添加一个修饰符,例如public,protectedinternal:

protected Person(

然后你可以base正常调用:

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

我已经尝试过基本命令,但它从来没有用过。

这不是一个真正的“命令”,但它确实有效:

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

诚然,目前尚不清楚您将在此处传递什么,因为您的参数似乎都没有指示名称或地址等……也许您需要添加更多参数?

编辑:也正如 Adam 所指出的,您需要增加Person构造函数的可见性,除非ResidentPerson. Resident如果您只需要在 的程序文本中调用构造函数,保持私有状态是可以的,Resident但您更有可能也希望增加它的可见性。

(作为旁注,这些参数名称很糟糕 - 为什么要在所有内容前面加上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 回答