我正在尝试为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中,它告诉我在Name类中创建一个方法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
}
}
答案 0 :(得分:8)
答案 1 :(得分:0)
this.name.Name(first,last);
查看Homework类的name变量。 name变量是Name类的一个实例。
编译器然后在Name类中查找名为Name的方法,该方法需要2个字符串。该方法可以是实例方法,也可以是静态方法。
由于没有这样的方法,您会收到错误。
按照惯例,方法以小写字母开头,类以大写字母开头。这个惯例非常重要,因为它可以帮助您了解什么是什么。每个类还至少有一个构造函数(如果你没有编译器为你创建一个)。构造函数与类具有相同的名称(命名约定内容的一部分)。查看名称类,有一个带两个字符串的构造函数。
要调用构造函数,必须使用“new”运算符“eg。this.name = new Name(first, last);
答案 2 :(得分:0)
要添加@rgettman提供的正确答案,您需要创建一个新的Name
对象,并使用您已经创建的构造函数执行此操作:public Name(String first, String last)
在Java(以及许多其他语言)中,您可以使用new
执行此操作。所以你只需说
new Name(first,last);
通过传入first
和last
引用的任何字符串来创建该对象。
但是创建一个新的Name
是不够的;你需要能够做它的东西。所以你将它分配给引用this.name
,所以现在Homework
有一个name
成员,它引用了内存中新创建的Name
对象。
因此,使用homework
对象,您可以执行homework.getName().getFirst();
当你写this.name.Name(first,last);
时,就像说Homework
有一个name
字段,其中包含一个名为Name
的方法,您正在传递first
和{{ 1}} ......当然不是你的意思。
您不必花很长时间了解构造函数的工作原理。坚持下去吧!