gpt4 book ai didi

java - 我的 System.out.println();继续打印 null 而不是它应该打印的文本

转载 作者:行者123 更新时间:2023-11-30 02:36:17 25 4
gpt4 key购买 nike

我不久前开始使用 Java,现在正忙于抽象类。我已经忙于这段代码两天了,但我不知道如何解决这个问题。方法名称可能不是英文,对此感到抱歉,但我认为这不会是太大的问题。我不知道为什么输出如下:空 空 空 空空 空 空 空空 空 空 空空空空空

希望大家能帮帮我。我将不胜感激任何帮助!提前致谢。

主类,也是抽象的:

public abstract class Boek {
public String isbn;
public String auteur;
public String paginas;
public String titel;

public abstract void setIsbn(String isbn);
public abstract void getIsbn();
public abstract void setAuteur(String auteur);
public abstract void getAuteur();
public abstract void setPaginas(int paginas);
public abstract void getPaginas();
public abstract void setTitel(String titel);
public abstract void getTitel();

public static void main(String[] args) {
Studieboek sb = new Studieboek();
Roman ro = new Roman();
Dichtbundel db = new Dichtbundel();

sb.setAuteur("J.K. Rowling");
sb.setIsbn("547896587412");
sb.setPaginas(251);
sb.setTitel("Harry Potter");
sb.addNAuteur("R.K. Dale");
sb.addOndertitel("Exactly");
sb.printSB();

ro.setAuteur("Suzanne Vermeer");
ro.setIsbn("9632589632574");
ro.setPaginas(311);
ro.setTitel("De Zwarte Piste");
ro.printRO();

db.setAuteur("A.Y. Lmao");
db.setIsbn("5781236985478");
db.setPaginas(171);
db.setTitel("Rijmen kreng");
db.addGedicht("Rijmpje");
db.printDB();
}
}

第一个子类:

public class Studieboek extends Boek {  
private String ondertitel;
private String nAuteur;

@Override
public void setIsbn(String isbn) {

}

@Override
public void getIsbn() {

}

@Override
public void setAuteur(String auteur) {

}

@Override
public void getAuteur() {

}

@Override
public void setPaginas(int paginas) {

}

@Override
public void getPaginas() {

}

@Override
public void setTitel(String titel) {

}

@Override
public void getTitel() {

}

public void printSB() {
System.out.println(titel + " " + auteur + " " + paginas + " " + isbn + " " + ondertitel + " " + nAuteur);
}

public void addOndertitel(String ondertitel) {

}

public void addNAuteur(String nAuteur) {

}

在此之后我还有两个子类,但我认为代码没有必要工作,因为其他两个子类中的代码完全相同并且给出完全相同的输出。

再次感谢您的帮助。提前致谢。

此致,

最佳答案

你的 setter 没有做任何事情。

正确的实现方法您的 isbn setter 将是:

@Override
public void setIsbn(String isbn) {
this.isbn = isbn;
}

注意它实际设置某些内容的部分。

你的 setter/getter 同样是错误的。 getter 应该返回一些东西,即不被声明为void并且有一个return语句:

@Override
public String getIsbn() {
return this.isbn;
}

I know they should contain a return value, but the return value gives an error and whenever I leave it empty it seems fine. (from the comments)

我猜错误是“void 方法无法返回任何内容”,是的,它会很好 - 除非你尝试类似的事情

System.out.println(sb.getIsbn()); // Will also print "null"

剩下的就交给你了。

<小时/>

奖励 1:如果您有一个抽象父类,您可以将常见的 getter 和 setter 移至 Boek,而不是仅仅将它们声明为 abstract。这将使您不必再次在每个子类中重新实现它们。

奖励 2:public 字段(如 public String isbn;)通常不鼓励使用。您已经有了 getter 和 setter,因此请让它们 protected (另请参阅:encapsulation)。

奖励 3:正如 Mike 'Pomax' Kamermans 在评论中所指出的:您不希望在 Boek 类中包含 main 方法。创建一个单独的“应用程序”类,仅使用 main 方法来启动您的应用程序。

奖励 4:我相信您想要使用 printSBprintROprintDB 方法实现的标准方法是重写toString() 方法。尽管这对于您的特殊用例可能有所不同。

按如下方式使用:

public class Studieboek extends Boek {
...

@Override
public String toString() {
return this.isbn + " " + this.auteur; // Plus the others
}
}

还有

// No need to call an additional method, toString will be invoked automatically
System.out.println(db);

关于java - 我的 System.out.println();继续打印 null 而不是它应该打印的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42985151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com