2015-06-21 2 views
-1

Я пытаюсь использовать методы из абстрактного класса, реализующего интерфейс. Я продолжаю получать исключение из null-указателя, когда я вызываю метод, и я не уверен, почему. Есть идеи? Благодарю.Как реализовать методы абстрактного класса? (Java)

package start; 
public class Automobile extends Vehicle {  // code with main method 
public static void main(String[] args) { 
     Vehicle[] automobiles = new Vehicle[3]; 
     automobiles[0].setVehicleName("Corvette"); 
    } 
} 

/////////////////////////////////////////// ///////////////////////////////

package start; 

public abstract class Vehicle implements Movable { 

    String name = "Unidentified"; // variables for vehicles 
    String manufacturer = "Factory"; 
    String car = "Unknown"; 
    int yearOfManufacture = 0000; 
    int horsepower = 0; 
    static int instances = 0; 

    int passengers = 0; // variables for methods below 
    int speed = 0; 

    public int getNoPassengers() { // returns how many passengers there are 
     instances = instances + 1; 
     return passengers; 
    } 

    public void setNoPassengers(int noPassengers) { // sets the number of passengers 
     instances = instances + 1; 
     passengers = noPassengers; 
    } 

    public int getTopSpeed() { // returns how fast a movable vehicle is 
     instances = instances + 1; 
     return speed; 
    } 

    public void setTopSpeed(int topSpeed) { // changes the speed of a movable vehicle 
     instances = instances + 1; 
     speed = topSpeed; 
    } 

    public void setVehicleName(String title) { // changes the name of a vehicle 
     instances = instances + 1; 
     name = title; 
    } 

    public String getVehicleName(String car){ 
     return car; 
    } 

    public void setManufacturer(String creator) { // changes the manufacturer 
     instances = instances + 1; 
     manufacturer = creator; 
    } 

    public String getManufacturer(String type){ 
     return type; 
    } 
} 

//////////// //////////////////////////////////

package start; 

interface Movable {  // interface 

    int getNoPassengers(); // returns how many passengers there are 

    void setNoPassengers(int noPassangers); // sets the number of passengers 

    int getTopSpeed(); // returns how fast a movable vehicle is 

    void setTopSpeed(int topSpeed); // changes the speed of a movable vehicle 
} 
+0

Пожалуйста выделить новый объект автомобилей [0] перед использованием. Это похоже на это - автомобильный авто; auto.setVehicleName ("а"); – Ouney

ответ

2

Вопрос заключается в том, что вы создали только массив транспортных средств в следующих строках -

Vehicle[] automobiles = new Vehicle[3]; 

Вы все еще необходимы инициализировать переменную для объектов с помощью нового автомобиля (или нового автомобиля, поскольку автомобиль является абстрактным классом и не может быть реализован), прежде чем они могут быть доступны ,

Пример -

Vehicle[] automobiles = new Vehicle[3]; 
automobiles[0] = new Automobile(); 
automobiles[0].setVehicleName("Corvette"); 
+0

Спасибо! Извините за глупый вопрос. – Equinoxinator

+0

добро пожаловать, все в порядке, все ошибаются, важно учиться у них. –

1

Ваш код в почте, как показано ниже:

Vehicle[] automobiles = new Vehicle[3]; 
automobiles[0].setVehicleName("Corvette"); 

Здесь только выделяется массив, но элемент в нем по-прежнему пусто (и, следовательно, исключения нулевого указателя при вызове сеттера на нулевой объект) и нуждается в инициализации, а также как:

automobiles[0] = new ....; 
//then access method from within automobiles[0] 
Смежные вопросы