Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何创建和运行类结构?_Java_Oop_Extend - Fatal编程技术网

Java:如何创建和运行类结构?

Java:如何创建和运行类结构?,java,oop,extend,Java,Oop,Extend,我必须创建以下类层次结构 我是这样开始的: 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

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

我是这样开始的:

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()

但我现在面临的问题是——我不知道如何设置类学生测试以及如何创建所有需要的实例。。。如果这个方法只在学生类中使用,那么如何使用方法print()

我完全是Java新手,但是,前两种方法正确吗

谢谢你们的帮助和耐心

编辑:学生测试方法的实施:

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

是的,看起来不错。这就是您希望
toString
返回的内容吗?另外,看一下抽象概念,除非你的教授还没有讨论过。也许他们会介绍这个话题。如您所见,所有3个类中都使用了
toString()
方法。您有一个类层次结构。

让我们逐一解决问题

  • 要创建实例,请使用Factory模式。创建类
    StudentFactory
    ,该类将具有方法
    createStudent()
    ,包含所有必需的参数,并根据这些参数创建远程或每日学生。请按以下方式使用它:

    学生=学生工厂。创建(……)

  • 从现在起,你们可以使用Student,工厂外并没有人知道它是哪个学生

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

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

    @RunWith(参数化的.class) 公开课学生测验{ 私立学生

    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(){
    返回数组.asList(
    StudentFactory.create(..)//create remote student
    StudentFactory.create(..);//创建每日学生
    }
    //在这里写下你的测试
    
    }


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

    我建议你买一本关于Java编程基本概念的书。谢谢你的回复,简,我会的。但是我现在要解决的问题是,如果print方法只在学生类中,如何将print()和toString()方法应用于所有实例?请查看上面的编辑。这就是你要找的。根据您使用的IDE。。。它将为您提供一个选项,只需单击一下即可自动引入这些方法。然后您可以在RemoteStudent类中更改这些方法,它将“重写”Student中的方法。请看一下youtube上的抽象示例或谷歌内部的搜索。简,请看一下更新的OP。我不确定,我们是否在谈论同样的内容。我创建了一个StudentTest类,我试图打印DailyStudent类中的数据。我不知道,我是否可以这样做,或者我是否需要在那里使用identificator
    super
    。这让我很困惑。是的,事实上这应该有效。你用过那个主要方法吗?它应该抓取“this”实例,该实例将是每日的,并使用它的toString方法。这就是“覆盖”。我会查看“头优先java”,并浏览您认为重要的部分。你也可以很容易地免费获得.pdf版本。