所以我有三个课程:书籍,书籍和Allbooks。 booksout和Allbooks是扩展/是书籍的子类。不过我有一个问题/疑问:
我在toString方法中收到allBooks的错误。说bookID等(即书中的所有变量)都设置为私有。我被告知你应该总是尽量避免公共变量,所以我犹豫不决。还有另外一种方法吗?或者将它们公之于众是最简单/最好的处理方式?
以下是代码:
图书
public class books {
private int bookID;
private String title;
private String author;
public books() {
}
public books(int bookID, String title, String author) {
this.bookID = bookID;
this.title = title;
this.author = author;
}
public int getBookID() {
return bookID;
}
public void setBookID(int bookID) {
this.bookID = bookID;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String addSpaces(String s, int w) {
String spc = "";
for (int i = 1; i <= (w - s.length()); i++) {
spc = spc + " ";
}
return spc;
}
public class AllBooks extends books{
private String genre;
private String status;
private String Location;
private String condition;
Allbooks
public AllBooks(int bookID, String title, String author, String genre, String status, String Location, String condition ) {
super(bookID, title, author);
this.genre = genre;
this.status = status;
this.Location = Location;
this.condition = condition;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getLocation() {
return Location;
}
public void setLocation(String Location) {
this.Location = Location;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
@Override
public String toString() {
String stg = "";
stg = stg + bookID + '\t' + title + addSpaces(title, 30) + author + addSpaces(author, 30) + genre + addSpaces(genre, 15) + status + addSpaces(status, 5) + Location + addSpaces(Location, 20) + condition;
return stg;
}
public String toString(int i){
String stg = "";
stg += bookID + "#" + title + "#" + author + "#" + genre + "#" + status + "#" + Location + "#" + condition + "#";
return stg;
}
如果这是一个愚蠢的问题,我很抱歉。这是一个学校项目,它应该在我假期之后,我现在正在这里,因此我不问我的老师。我确实在网上查了答案,但是我遇到的教程没有提到很多关于礼仪的内容。感谢您的帮助,和/或抱歉浪费您的时间。
答案 0 :(得分:6)
使用现有的公共访问者。例如,在子类中使用getBookID()
而不是直接尝试访问超类的私有字段。
@Override
public String toString() {
String stg = getBookID() + '\t' + getTitle()
+ addSpaces(title, 30) + getAuthor()
+ addSpaces(author, 30) + getGenre()
+ addSpaces(genre, 15) + getStatus()
+ addSpaces(status, 5) + getLocation()
+ addSpaces(Location, 20) + getCondition();
return stg;
}
另一种方法是制作字段protected
。但是,这允许可能任意数量的子类直接耦合到您的超类的表示。将数据封装在方法后面通常是可取的。
顺便说一下,您可能会发现String.format()很有用。有关语法,请参阅Format String Syntax。
答案 1 :(得分:1)
由于您已经拥有bookID的getter,因此您无法在其他类中使用它,例如:
System.out.println(books.getBookID());
答案 2 :(得分:0)
正如Andy Thomas所指出的,您可以直接使用公共方法来访问它。公共方法实际上封装了私有变量。
如果你仍然需要直接使用它,你应该保护它,这意味着只有扩展它的类才能访问它。