我是Java的新手,我正在为一所学校做任务,但我似乎陷入了基本面。
我的第一堂课如下:
public class Publisher {
private String name;
private String state;
public Publisher(){}
public Publisher(String name, String state) {
super();
this.name = name;
this.state = state;
}
public String getName() {
return name;
}
public String getState() {
return state;
}
}
在第一个类中,我有两个字段,其值通过构造函数更改,并且只能使用getter访问。我还有另一个构造函数,我用它来创建下一个类中的对象。
这是我的另一堂课:
public class Book {
private String bookName;
private String language;
public static void main(String[] args) {
Publisher publisher = new Publisher();
String publisherName=publisher.getName();
}
public Book(String bookName, String language) {
super();
this.bookName = bookName;
this.language = language;
}
public String getBookName() {
return bookName;
}
public String getLanguage() {
return language;
}
}
在第二节课中,我基本上想要做与第一节相同的事情,不同之处在于我想将Publisher类的对象名称用作第三个字段。在我的新手思考中,我想到了解决问题,如代码所示,但我不知道我是否可以某种方式使用main方法的局部变量作为实例变量。
我感觉我在某处犯了初学者的错误,所以欢迎任何建议或解决方案。
答案 0 :(得分:3)
如果你想要第三场,你应该先成功。然后你应该在你创建的每个对象中执行赋值(例如在构造函数中),否则它将是null
。
public class Book {
private final String bookName;
private final String language;
private final Publisher publisher; //third field
public Book(String bookName, String language, Publisher publisher) {
super();
this.bookName = bookName;
this.language = language;
this.publisher = publisher; //assignment of new field
}
public String getBookName() {
return bookName;
}
public String getLanguage() {
return language;
}
public String getPublisher() { //new getter
return publisher;
}
}
实际上,在您的代码中,您所做的就是创建在main
方法结束后停止存在的局部变量。您应该使用main
来测试您的课程,但对于分配这样的内容,它不会产生任何影响。我也在这里用final
修饰符,因为我们应该避免可变性(你可以了解它)。
答案 1 :(得分:1)
您可以轻松地向Book
添加另一个字段,该字段存储对发布商的引用 - 与bookName
和language
完全相同。
另外,我建议您将main
方法移到一个没有其他内容的新类中,以使其更简单。
public class Book {
private String bookName;
private String language;
private Publisher publisher; // <--- NEW
public Book(String bookName, String language, Publisher publisher) { // <--- NEW PARAMETER
super();
this.bookName = bookName;
this.language = language;
this.publisher = publisher; // <--- NEW
}
// main removed (add it to another class)
public String getBookName() {
return bookName;
}
public String getLanguage() {
return language;
}
// NEW METHOD
public Publisher getPublisher() {
return publisher;
}
}
答案 2 :(得分:-1)
当您在main方法中编写Publisher publisher = new Publisher();
时,您只是创建Publisher
的实例,但是如果您在Publisher
中使用Book
作为实例变量(字段) {1}}类,您可以在每次创建Book
实例时使用它。
例如,如果您的Book类是这样的
public class Book {
private String bookName;
private String language;
private Publisher publisher;
public Book(String bookName, String language, Publisher publisher) {
super();
this.bookName = bookName;
this.language = language;
this.publisher = publisher;
}
public String getBookName() {
return bookName;
}
public String getLanguage() {
return language;
}
public Publisher getPublisher() {
return publisher;
}
}
您可以在任意位置创建Book
课程,并使用其中的“发布商”字段来引用Publisher
对象,如图所示。
Book b = new Book();
b.publisher = new Publisher(); // or any method that returns 'Publisher' type object.
更新:尽管您可以通过上述方式访问publisher
引用,但这不是一个好习惯。您必须封装字段并使用setter和getter访问它们。 (请参阅Publisher的构造函数和getter方法)