У меня возникло сомнение при рассмотрении переопределения функций в java.Как статическое наследование методов и наследование статической переменной различаются?
Рассмотрим следующий код:
class Vehicle {
static int speed = 50;
public static void display() {
System.out.println(speed);
}
}
class Jeep extends Vehicle {
int speed = 100;
void display() { //GETTING COMPILE TIME ERROR
System.out.println(speed);//will print speed of Bike
}
public static void main(String args[]) {
Jeep b = new Jeep();
System.out.println(b.speed);
}
}
Я читал, что статические методы не могут быть переопределены.
Но в приведенном выше коде я объявил статическую переменную 'speed' в родительском классе Vehicle. И я создал переменную экземпляра с таким же именем «скорость» в дочернем классе. Я не получил ошибку времени компиляции, так как я изменил значение статической переменной «скорость» в дочернем классе.
Я столкнулся с проблемой времени компиляции при попытке переопределить метод отображения, в то время как я не получаю никаких ошибок при повторном объявлении переменной «скорость», хотя оба они статичны в родительском классе.
Что может быть причиной того, что speed
переменной подкласса скрывает статический speed
переменного родительского класса, но не делать то же самое с помощью метода display
и показывать компиляции ошибки времени?
Что вы спрашиваете о? Поля или методы экземпляра? 'speed' или' display'? (Это важно.) –
вы ничего не меняли статической переменной 'speed' в дочернем классе? – SomeJavaGuy
Поля никогда не могут быть переопределены, статичны или нет, поэтому для полей нет проблем. –