Когда вы вызываете метод print
на animal
, JVM сначала ищет метод print
в объекте dog
. Если в объекте dog
не было print
, JVM будет искать суперкласс Dog
. Поскольку он находит метод print
в классе Dog
, он начинает его выполнять. Поле имени в классе Dog
скрывает поле имени, которое было унаследовано от класса Animal
. Его так же, как:
public class Test {
static String name = "xyz";
public static void main(String[] args) {
{
String name = "abc";
System.out.println(name); // abc is printed
}
System.out.println(name); // xyz is printed
}
}
Внутри блока есть локальная переменная name
. Таким образом, глобальная переменная name
скрыта. Но когда вы выходите из блока, появляется локальная переменная.
ПРИМЕЧАНИЕ:
Dog
класс должен выглядеть следующим образом:
class Dog extends Animal{
this.name = "Dog";
public void print(){
System.out.println("I am a: " + this.name);
}
}
Вы сделали плохой дизайн.
Ваша ошибка жалуется «Я не знаю, как читать нулевое значение».
Функция чтения файла options.go имеет оператор switch в строке 117, который реализует способы чтения различных баз данных типы. Вам нужно будет обновить этот оператор switch, чтобы иметь возможность обрабатывать значение типа null («tcNull»?).