Вы уверены, что ваш пример кода, предоставленные в вашем вопросе ТОЧНО соответствует коду вашим использует? Причина, по которой я спрашиваю, заключается в том, что поведение, которое вы описываете, происходит, когда вы обращаетесь к публичному FIELD вместо публичного МЕТОД с указателем на объект.
Например:
public class BaseClass {
public String baseField;
public BaseClass() {
baseField = "base";
}
public String getBaseField() {
return baseField;
}
}
public class SubClass extends BaseClass {
public String baseField;
public SubClass() {
baseField = "sub";
}
public String getBaseField() {
return baseField;
}
}
public class MainClass {
public static void main(String[] args) {
BaseClass baseObject = new BaseClass();
SubClass subObject = new SubClass();
System.out.println(baseObject.getBaseField());
System.out.println(subObject.getBaseField());
System.out.println(baseObject.baseField);
System.out.println(subObject.baseField);
System.out.println(((BaseClass)subObect).getBaseField());
System.out.println(((BaseClass)subObect).baseField);
}
}
напечатает:
base
sub
base
sub
sub
base
При вызове метода, виртуальная машина запускается в нижней части иерархии наследования и вызвать соответствующий метод. Когда вы ссылаетесь на поле , вместо этого он использует класс указателя вместо того, чтобы идти вверх по иерархии классов для разрешения значения. Поведение ссылки на поле соответствует тому, что вы видите, поэтому я прошу разъяснения/проверки.
Вы хотите возвратить базовое яблоко каждый раз или он возвращает базовое яблоко каждый раз, и вы не знаете почему> – Janusz
Вы должны опубликовать минимальный пример кода, который компилирует и воспроизводит проблему при ее выполнении. Если вы это сделаете, вы, вероятно, уже сами заметите, в чем проблема. –
Thx за ответы ребята, это место действительно потрясающее! Мой Java-код был на самом деле прекрасен ... один выше был просто для иллюстрации, но в следующий раз я приложу усилие, чтобы опубликовать код, который действительно компилируется. Проблема была на самом деле в javascript, который делал запрос ajax, я не смог сериализовать форму перед отправкой запроса ... в любом случае я действительно многому научился из всех ответов! :) – hdx