0

我正在尝试为 java 中的一个类做一些功课,我想做的部分是在 homework.class 中创建一个新人,它扩展了 .name 类

名称类

public class Homework extends Object implements Comparable<Homework> {

private int id;
private Name name;
private int section;
private Files files;
private int dateSubmitted;  

...... hwk 类的一部分

public Homework(String first, String last, int section, int dateSubmitted){ //fix me
    this.id = nextAvailableUid();
    this.section = section;
    this.dateSubmitted = dateSubmitted;     
    this.name.Name(first,last); //error is here in the Name call telling me Name is not a method of Name
}

我得到的错误是在名称中,它告诉我在名称类中创建一个方法名称,我知道有....从 name.class 中可以看出

public class Name implements Comparable<Name>{

private String Fname;
private String Lname;


    public  Name(String first, String last) {
    this.Fname = first;
    this.Lname = last; //init the name

}
 }
4

3 回答 3

9

使用运算符调用构造函数new

this.name = new Name(first,last);

这是有关该主题的 Java 教程

于 2013-10-11T16:51:44.703 回答
0

this.name.Name(first,last);查看 Homework 类的 name 变量。name 变量是 Name 类的一个实例。

然后编译器在 Name 类中查找一个名为 Name 的方法,该方法采用 2 个字符串。该方法可以是实例方法或静态方法。

由于没有这种方法,您会收到错误消息。

按照惯例,方法以小写字母开头,类以大写字母开头。这个约定非常重要,因为它可以帮助您了解什么是什么。每个类还至少有一个构造函数(如果您不制作一个,编译器会为您制作一个)。构造函数与类同名(命名约定的一部分)。查看名称类有一个构造函数,它需要两个字符串。

要调用构造函数,您必须使用“new”运算符”,例如。this.name = new Name(first, last);

于 2013-10-11T16:58:27.533 回答
0

要添加@rgettman 提供的正确答案,您需要创建一个新Name对象,并使用您已经创建的构造函数来执行此操作:public Name(String first, String last)

在 Java(和许多其他语言)中,您可以使用new. 所以你简单地说

new Name(first,last);

通过传入firstand引用的任何字符串来创建该对象last

但是创造一个新Name的还不够;你需要能够用它做事。所以你将它分配给引用this.name,所以现在Homework有一个name成员引用Name内存中新创建的对象。

所以对于一个homework对象,你可以做类似的事情homework.getName().getFirst();

当你写this.name.Name(first,last);的时候,就像说Homework有一个带有你正在传递的name方法的字段......这当然不是你的意思。Namefirstlast

您很快就会了解构造函数的工作原理。坚持下去!

于 2013-10-11T17:04:07.173 回答