2015-02-19 5 views
1

У меня есть следующая программа:статическая переменная декларация суперкласс - Java

class Vehicle{ 
    static int speed=50; 
    Vehicle(){ 
     this.speed=speed; 
    } 
} 


class Bike4 extends Vehicle{ 
    int speed=100; 

    void display(){ 
    System.out.println(Vehicle.speed);//will print speed of Vehicle now 
    } 
    public static void main(String args[]){ 
    Bike4 b=new Bike4(); 
    b.display(); 
    } 
} 

Предположив Я не хочу использовать ключевое слово «супер» и я просто вызвать функцию «Vehicle.speed» почему я нужно изменить тип переменной скорости в суперклассе на статический? Что произойдет, если я запустил программу без использования статического ключевого слова? (опять же, предположим, что он компилируется)

+0

Почему вы ставите эту переменную статическую в первую очередь? –

+1

Что вы подразумеваете под «просто называть функцию Vehicle.speed»? Это поле, а не функция. И 'static' не является * типом *, это модификатор ... –

+1

Я думаю, вам следует рассмотреть примечания к классу (статические) и экземпляры (нестатические) поля. 'Vehicle.speed', как вы написали, это не скорость данного автомобиля. Это скорость всех автомобилей, что не имеет смысла. – RealSkeptic

ответ

1

Поскольку вы определяете другую скорость для Bike4 в отличие от исходного транспортного средства, похоже, вы хотите изменить производное значение. Статическая переменная не будет работать, потому что она принадлежит классу, а не экземпляру. Я думаю, что вы хотите что-то вроде этого:

public class Vehicle{ 
    protected int speed; 
    Vehicle(int speed) { 
     this.speed=speed; 
    } 
} 


public class Bike4 extends Vehicle { 
    public Bike4(int speed) { 
     super(speed); 
    } 

    void display() { 
     System.out.println(speed); 
    } 
    public static void main(String args[]) { 
     Bike4 b=new Bike4(100); 
     b.display(); 
    } 
} 
Смежные вопросы