Как переопределить метод родительского класса с методом дочернего класса в Java? - PullRequest
0 голосов
/ 24 мая 2018

У меня есть задача:

Изменить класс Car таким образом, чтобы он переопределял метод setCapacity своей собственной версией, которая выводит сообщение «Невозможно изменить мощность автомобиля» и не изменяетобъем двигателя.

Я попытался решить задачу, описанную в приведенном ниже коде, но он продолжает использовать setCapacity метод Vehicle класса вместо метода Car.

class Vehicle // base class
{  
    int capacity;
    String make;

    Vehicle(int theCapacity, String theMake)
    {
        capacity = theCapacity;
        make = theMake;
    }

    void print() 
    {
        System.out.println("Vehicle Info:");
        System.out.println("  capacity = " + capacity + "cc" );
        System.out.println("  make = " + make );
    }

    public void setCapacity(int newCapacity)
    {
        capacity = newCapacity;
        System.out.println("New capacity = " + capacity);
    }
}

class Car extends Vehicle 
{
    String type, model;

    Car(int theCapacity, String theMake, String theType, String theModel)
    {
        super(theCapacity, theMake);
        type = theType;
        model = theModel;
    }

    public void print() 
    {
        super.print();
        System.out.println("  type = " + type);
        System.out.println("  model = " + model);
    } 

    public void setCapacity()
    {
        System.out.println("Cannot change capacity of a car");
    }
}

class Task3
{
    public static void main(String[] args) 
    {
        Car car1 = new Car(1200,"Holden","sedan","Barina");
        Vehicle v1 = new Vehicle(1500,"Mazda");

        v1.setCapacity(1600);
        v1.print();
        car1.setCapacity(1600);
        car1.print();
    }
}

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Проблема может заключаться в том, что метод класса Car, чье имя - "setCapacity", не переопределяет метод родительского класса Vehicle с тем же именем. Потому что у него нет param, но в его родительском классе есть param.Надежда может помочь вам!

0 голосов
/ 24 мая 2018

Ваш метод setCapacity() класса Car не переопределяет метод setCapacity(int newCapacity) класса Vehicle.

Чтобы переопределить метод базового класса, подчиненныйМетод класса должен иметь одинаковую подпись.

Изменить

public void setCapacity()
{
   System.out.println("Cannot change capacity of a car");
}

на

@Override
public void setCapacity(int newCapacity)
{
   System.out.println("Cannot change capacity of a car");
}

Обратите внимание, что добавление атрибута @Override необязательно, но оно сообщиткомпилятор, который вы намеревались переопределить метод базового класса (или реализовать метод интерфейса), что приведет к полезной ошибке компиляции, если вы неправильно объявили метод переопределения.

...