java类和子类

时间:2011-11-19 18:24:39

标签: java class

在我学习Java的下一步,我现在正在进行类和继承。

我有一个功课要解决,但我有点卡住,所以我在这里不是要求代码,而是看你是否同意我的思考方式,如果没有,请帮我一些指导。请理解,遗憾的是我并不了解所有的Java,而且我正在采用这种语言。

所以,问题在于:

  

旨在创建一个支持会议组织的计划。会议有名称,位置和日期。此外,每个会议都有一个组织委员会和一个计划委员会。两个委员会的成员都通过姓名,电子邮件地址和机构来识别。组织委员会成员的特点还在于它们在会议中的作用(财务,空间或餐饮)。计划委员会成员是   其特点是反映了他们在上一届会议中表现的参数(差,公平,良好,优秀)。此外,计划委员会成员还与需要审查的文章列表相关联。

     

每篇文章的特点是它的标题,作者列表和评估结果(注意在1和5之间,其中5是最好的)。每篇文章的最终评估是通过计划委员会两名成员进行的评估的平均值得出的。作者的特点是姓名,电子邮件地址,机构和注册费。这笔费用可以分为两类:高级(教师或研究人员)和学生。学生应该考虑学位(学士,硕士或博士学位)。

     

会议注册费为老年人400美元,学生200美元。订阅授权您提交一篇文章。希望提交更多内容的高级作者   每篇文章必须为每篇文章支付50美元。据认为,每篇文章的第一作者将负责在会议上的发言。

有了这个,我必须实现一些功能,但这不是我在这里的原因。

阅读问题我可以看到

name
email
institution

用于识别委员会成员和作者。

所以我想创建一个

public class Identification{
    ---------------
    name
    email
    institutionName
    ---------------
}

然后一切都变得复杂,因为我知道我必须创建一些扩展该类的东西。

我可以创建

public class Conference{
    ---------------
    name
    location
    date[]
    ---------------
}

然后

public class Organization extends Conference{
    ---------------
    role[] // 0 for finance, 1 for spaces and 2 for meals
    ---------------
}

public class Program extends Conference{
    ---------------
    performance[] //0 poor, 1 fair, 2 good and 3 excellence
    articlesList[] // probably an id of and article
     ---------------
}

但是组织和程序这两个类都有成员,并且这些成员由类标识上的相同内容标识。就像我现在一样,Java只能扩展一个且只有一个类,所以现在我已经陷入了它们之间的关系。

阅读我发现的其他问题

public class Article{
    ---------------
    title
    listOfAuthors[] //probably an id
    evaluation //this is done by two members on program committee but I can't figure out how they relationship between themselves.
     ---------------
}

public class Authors{
    ---------------
    type[][] // 0 for seniors and 1 for students on first column and 0 teachers, 1 researchers, 2 bachelor, 3 master and 4 doctorate on second column.
    numberOfArticles //how many articles author wants to submit
    conferenceFee[] // if on type[i][0] is 0 then Fee is 400 + (numberOfArticles * 50)  else is 200
    ---------------
}

是这样的。我无法理解是否必须创建所有这些类以及哪个类扩展了另一个类。有评论吗?

favolas

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! UPDATE! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

感谢您的所有反馈。让我们看看我是否至少了解了你的一些建议。

public class Member{
    ---------------
    memberID
    name
    email
    institutionName
    ---------------
}

public class Authors extends Member{
    ---------------
    authorsID
    conferenceFee
    ---------------
}

public class Seniors extend Authors{
    ---------------
    degree[] // 0 for teachers 1 for researchers
    numberOfArticles = // Some int
    fee = 400

    public int payment(int numberOfArticles ){
        return numberOfArticles * fee;
    }
    ---------------
}

public class Students extend Authors{
    ---------------
    degree[] // 0 bachelor, 1 master and 2 doctorate
    numberOfArticles = // Some int
    fee = 200

    public int payment(){
        return fee;
    }
    ---------------
}

public class Article extend Authors{
    ---------------
    articleID
    title
    listOfAuthors[] //probably an id
    ---------------
}

public class ProgramCommitteeMember extends Member{
    ---------------
    role[] // 0 for finance, 1 for spaces and 2 for meals

    ---------------
}

public class OrganizationCommitteeMember extends Member{
    ---------------
   lasYearPerformance[] //0 poor, 1 fair, 2 good and 3 excellence
   articlesList[] // probably an id of and article
    ---------------
}

public class Committee{
    ---------------
    committeeType[] // 0 for Organization Committee and 1 for Program Committee
    ---------------
}

public class OrganizationCommittee extends Committee{
    ---------------
    listOfMembers[] //member id
    ---------------
}

public class ProgramCommittee extends Committee{
    ---------------
    listOfMembers[] //member id
    ---------------
}

他是这样的?

5 个答案:

答案 0 :(得分:2)

我认为你混淆了继承和构成。

组织是一种会议吗?如果没有,请不要继承它。其中一个需要包含另一个 - 当第一个消失时,第二个必须。也可能是另一个需要回头看第一个 - 孩子需要知道他们的父母。那也没关系。

节目是一种会议吗?同样的事情也在这里。

查看Liskov Substitution Principle

答案 1 :(得分:0)

我认为有几点我觉得你已经脱轨了。

  1. 您在会议中将日期显示为数组。每个会议实例只有一个日期。

  2. 您将组织和计划都显示为会议的子类。他们不应该。相反,应该有一个名为委员会的超类,有两个子类,OrganizationCommittee和ProgramCommittee。然后你的Conference类有两个内部变量,分别是OrganizationCommittee和ProgramCommittee类型。换句话说,“委员会”不是“会议”的类型,而是“会议”的成员。 (在这里,我不是指“一个人参加会议”,我的意思是“一个由另一个对象拥有的对象。”)

  3. 每个委员会都有成员。所以你需要一个成员超类,有两个子类,OrganizationCommitteeMember和ProgramCommitteeMember。然后,您的ProgramCommittee将包含ProgramCommitteeMembers的列表(exmaple数组),您的OrganizationCommittee将包含OrganizationCommitteeMembers列表。

  4. 另一件事是,您将角色[]显示为组织中的数组。首先,角色适用于委员会的成员,而不是组织。其次,每个成员只有一个角色。您需要的是一种定义规定的角色列表的方法,以便只能分配几个有效值中的一个。但每个成员只有一个角色。

  5. 关于指令使用短语“has a”(表示一个类包含另一个类的实例)与“is a”(表示一个类是父类的类型)的关键。

    希望这有助于让您走上正确的轨道。

答案 2 :(得分:0)

仔细查看您需要表示的“实体”。 Entites可能会成为您程序中的对象。您需要哪些实体/对象? - 例如,与实体“委员会”和“委员会成员”开始。

找到所有涉及的实体后,您可以开始查看并比较它们:

是否存在具有共同点(属性)的不同实体?这些是这些实体的共同超类的候选者。您提议的Identification课程是正确的方法。现在更进一步:哪些实体共享“可识别”的属性?这些应该继承自Identification

另请注意,“类B 从类A继承”通常表示“B是A的特殊种类”。您的组织是一种特殊的会议吗?

答案 3 :(得分:0)

你是正确的,Java不允许多重继承(也就是说,每个类只能扩展另一个类)。

通常,类,子类和继承的想法是特定子类的对象是其超类的特定种类。例如,拥有一个Animal类是有意义的,然后创建一个扩展Animal的子类Horse。

或者,使用您介绍的框架,您可以拥有一个Author类,然后是一个Senior类和一个Student类,这两个类都将扩展Author。利用这种结构的一种好方法可能是在返回int的三个类中包含一个pay()方法。由于学生作者只需支付200美元,Student类中的pay()方法将返回200,而Senior类中的pay()方法将返回400.这里的关键观察是现在你可以调用pay()方法作为作者的任何对象,因此您无需事先检查作者是高级还是学生。您应该能够考虑类似的方法来处理问题的其他方面。

答案 4 :(得分:0)

那里没有太多的继承,我想我会一直使用聚合和接口。

会员(您称此身份证明) 然后 委员会成员延伸 和 ProgramCommitteeMember扩展了会员

看看继承,因为X是Y

组织是一个没有意义的会议。这是委员会在会议上履行的职责。所以 会议和会议 然后角色描述成员和会议。

计划委员会成员在会议上有表现,所以你有 会议,会议 和表演描述了memebr和会议。

因此,您可以定义基类会议成员,然后为角色和绩效进行扩展。

所有关于有一个并且是一个 一本书有作者。 作者是作家。