Почему метод дочернего класса печатает нуль? Что я делаю неправильно? - PullRequest
0 голосов
/ 06 октября 2019

Любые подсказки, почему мой код принимает нулевое значение в качестве выходного значения вместо переданного параметра. Пожалуйста, проведите меня по коду.

Родительский класс:

class Language{
  protected String name;
  protected int numSpeakers;
  protected String regionsSpoken;
  protected String wordOrder;

  public Language(String getName, int getNumSpeakers, String getRegionsSpoken, String getWordOrder){
    this.name = getName;
    this.numSpeakers = getNumSpeakers;
    this.regionsSpoken = getRegionsSpoken;
    this.wordOrder = getWordOrder;
  }

  public 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 {
  protected String name;
  protected int numSpeakers;

  Mayan(String languageName,int speakers ){
    super(languageName,speakers,"Central America","verb-object-subject");
  }

  @Override
  public void getInfo() {
    System.out.println(name+" is spoken by "+numSpeakers+" people mainly in Central America.");
    System.out.println("The language follows the word order: verb-object-subject");
    System.out.println("Fun fact: "+name+" is an ergative language.");
  }
}

Я изучил код и попытался разрешить его, внеся изменения, но ничего не помогло, я застрял в той ошибке, которую не вижу в коде.

Ожидается, что на киче говорят 2330000 человек, в основном в Центральной Америке. Язык следует за порядком слов: глагол-объект-субъект Забавный факт: Ki'che 'является эргативным языком.

Фактически: на ноль говорят 0 человек, в основном в Центральной Америке. Язык следует за порядком слов: глагол-объект-субъект Интересный факт: нуль - эргативный язык.

1 Ответ

1 голос
/ 06 октября 2019

В Mayan у вас есть поля

protected String name;
protected int numSpeakers;

Удаление этих исправит вашу проблему. Причина, по которой возникает эта проблема, заключается в том, что когда вы определяете две строки выше, вы скрываете два поля от Language и вам необходимо получить доступ к полям из Language, например 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.");
    }
}

Как указал Гэвин, модификаторы доступа могут быть ограничены. Если вы работаете в одном пакете для вашей программы, вы можете получить что-то вроде

Language.java

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();
    }
}

Mayan.java

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.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...