Java 为什么子类方法打印为null?我做错了什么?
任何提示为什么我的代码将null作为输出值而不是传递的参数。请引导我通过代码 父类: 儿童班: 我已经研究了代码,并试图通过修改来解决它,但似乎没有任何效果,我陷入了代码中没有看到的错误中 预计: 基切语主要在中美洲有2330000人说。 语言遵循语序:动宾主语 有趣的事实:基切是一种作格语言 实际情况是: null主要由中美洲的0人说。 语言遵循语序:动宾主语 有趣的事实:null是一种作格语言。在玛雅语中,你有字段Java 为什么子类方法打印为null?我做错了什么?,java,inheritance,polymorphism,core,Java,Inheritance,Polymorphism,Core,任何提示为什么我的代码将null作为输出值而不是传递的参数。请引导我通过代码 父类: 儿童班: 我已经研究了代码,并试图通过修改来解决它,但似乎没有任何效果,我陷入了代码中没有看到的错误中 预计: 基切语主要在中美洲有2330000人说。 语言遵循语序:动宾主语 有趣的事实:基切是一种作格语言 实际情况是: null主要由中美洲的0人说。 语言遵循语序:动宾主语 有趣的事实:null是一种作格语言。在玛雅语中,你有字段 protected String name; protected int n
protected String name;
protected int numSpeakers;
删除这些将解决您的问题。发生此问题的原因是,当您定义上面的两行时,您对语言隐藏了这两个字段,并且您必须从语言(如super.name、super.numSpeakers等)访问这些字段
你可能想要的是下面这样的东西
public class Mayan extends Language {
private static final String REGION = "Central America";
private static final String WORD_ORDER = "verb-object-subject";
public Mayan(String languageName, int speakers) {
super(languageName, speakers, REGION, WORD_ORDER);
}
@Override
public void getInfo() {
super.getInfo();
System.out.println("Fun fact: " + name + " is an ergative language.");
}
}
正如Gavin指出的,访问修饰符可以被限制。如果您在程序的单个包中工作,那么最终可能会遇到以下情况
Language.java
Mayan.java
我会更进一步说,语言中的字段应该是私有的,并提供getter。@Gavin你是对的,你可以进一步限制访问修饰符,这取决于OP计划如何在其应用程序中使用代码project@HimanshuKandpal我很高兴能帮上忙。如果你觉得这已经解决了你的问题,你能打勾让别人知道问题已经解决了吗。我很感激it@Dan完全同意,我们只有上面的代码片段,而不是代码的全部意图:
protected String name;
protected int numSpeakers;
public class Mayan extends Language {
private static final String REGION = "Central America";
private static final String WORD_ORDER = "verb-object-subject";
public Mayan(String languageName, int speakers) {
super(languageName, speakers, REGION, WORD_ORDER);
}
@Override
public void getInfo() {
super.getInfo();
System.out.println("Fun fact: " + name + " is an ergative language.");
}
}
class Language {
String name;
private int numSpeakers;
private String regionsSpoken;
private String wordOrder;
Language(String getName, int getNumSpeakers, String getRegionsSpoken, String getWordOrder) {
this.name = getName;
this.numSpeakers = getNumSpeakers;
this.regionsSpoken = getRegionsSpoken;
this.wordOrder = getWordOrder;
}
void getInfo() {
System.out.println(name + " is spoken by " + numSpeakers + " people mainly in " + regionsSpoken);
System.out.println("The language follows the word order: " + wordOrder);
}
public static void main(String[] args) {
Mayan mayanLanguage = new Mayan("Ki'che'",30000);
mayanLanguage.getInfo();
}
}
class Mayan extends Language {
private static final String REGION = "Central America";
private static final String WORD_ORDER = "verb-object-subject";
Mayan(String languageName, int speakers) {
super(languageName, speakers, REGION, WORD_ORDER);
}
@Override
void getInfo() {
super.getInfo();
System.out.println("Fun fact: " + name + " is an ergative language.");
}
}