0

我必须创建以下类层次结构。

在此处输入图像描述

我是这样开始的:

public class Student {
  private String name;
  private int credits;
  public Student(String name, int credits) {
    this.name = name;
    this.credits = credits;
  }

  public String getName(){
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
  // ...the same for "credits"...

  public String toString(){
    return "name: "+this.name+", credits: "+this.credits;
  }

  public void print(){
    System.out.print(this.toString);
  }
}

public class DailyStudent extends Student {
  private int scholarship;
  public DenniStudent(int scholarship) {
    this.scholarship = scholarship;
  }

  public int getScholarship(){
    return scholarship;
  }
  public void setScholarship(int scholarship) {
    this.scholarship = scholarship;
  }
  public String toString(){
    return "Scholarship: "+scholarship;
  }
}

名为RemoteStudent的类看起来与DailyStudent类几乎相同。

现在我必须创建类StudentTest,我将在其中测试我刚刚创建的内容。在这个类中,我应该使用声明的构造函数(带有所有参数)从上面的每个类中创建实例(对象)。在所有创建的对象上,我应该应用toString()print()方法。

但是在这里我遇到了问题 - 我不知道,如何设置类StudentTest以及如何在那里创建所有需要的实例......以及如何使用方法print(),如果这个方法只是 int学生班。

我完全是 Java 新手,但是,两个 2 first 方法是否正确?

谢谢你们的帮助和耐心。

编辑:StudentTest方法的实现:

public class StudentTest {
  public static void main(String[] args) {
    DailyStudent daily = new DailyStudent(1000);
    daily.print(); // this is what I mean
  }
}
4

2 回答 2

1

是的,它看起来不错。那是你想要toString返回的吗?另外,看看抽象,除非你的教授还没有谈到这一点。也许他们会介绍这个话题。如您所见,该toString()方法用于所有 3 个类。你有一个类层次结构。

于 2013-01-22T17:14:38.673 回答
0

让我们一个一个地解决问题。

  1. 要创建实例,请使用工厂模式。创建具有所有需要参数StudentFactory的方法的类,createStudent()并根据这些参数创建远程或日常学生。使用如下:

    学生 student = StudentFactory.create(......);

从现在开始,您可以使用学生,工厂外的任何人都不知道它是哪个学生。

  1. 您现在可以使用您的print方法:student.print(). 它适用于远程和日常学生。

  2. 在测试中使用工厂。如果它是基于 JUnit 的测试,您可以使用注释@RunWith(Parametrized.class)并只编写一个测试用例,该用例将为日常和远程学生运行。

    @RunWith(Parameterized.class) 公共类 StudentTest { 私人学生学生;

    public StudentTest(Student student) {
        this.student = student;
    }
    
    @Parameter
    public static Collection<Student> createStudent() {
        return  Arrays.asList(
                    StudentFactory.create(....),    // create remote student
                    StudentFactory.create(....));   // create daily student
    }
    // write your tests here
    

    }

此测试用例将为在createStudent()方法中创建的两个学生运行。

于 2013-01-22T17:26:29.717 回答