Как я могу повторно использовать переменную из метода суперкласса?

#java #inheritance

#java #наследование

Вопрос:

Я создаю полную программу вычисления блоков на Java. На самом деле значение переменной с именем volume должно быть 125, если width = 5, height = 5, depth = 5, но почему на выходе отображается значение 0 независимо от любого значения для width , height и depth . Мне нужна помощь, пожалуйста….

Ниже приведен мой код:

 import java.io.*;

public class Test {
    public static void main(String args[]) throws IOException {
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        Box obj1 = new Box();
        MatchBox obj2 = new MatchBox();

        System.out.print("Please Enter Width: ");
        obj1.width = Integer.parseInt(read.readLine());
        System.out.print("Please Enter Height: ");
        obj1.height = Integer.parseInt(read.readLine());
        System.out.print("Please Enter Depth: ");
        obj1.depth = Integer.parseInt(read.readLine());

        obj1.getVolume();
        obj2.displayVolume();
    }
}

class Box {
    int width, height, depth, volume;

    void getVolume() {
        volume = width * height * depth;
    }
}

class MatchBox extends Box {
    void displayVolume() {
        System.out.println("The Volume of Box is: "   volume);
    }
}
  

Комментарии:

1. Вы работаете с размерами obj1 , но затем вы печатаете объем obj2 !

2. вы присваиваете значение obj1 , но отображаете из obj2

3. экземпляр obj1 не связан с obj2 (просто имеет некоторый общий класс / суперкласс) — существуют совершенно разные экземпляры (например, в реальном мире, если вы меняете шины своего автомобиля, это не влияет на все транспортные средства, которыми вы владеете)

Ответ №1:

вы создаете один экземпляр класса Box с именем obj1 и один экземпляр класса MatchBox с именем obj2. То, что это делает, не совсем то, что вы хотите в этом примере!

Вот как должен выглядеть ваш код:

 ...
MatchBox matchBox = new MatchBox(); ' you only need to create this instance

System.out.print("Please Enter Width: ");
matchBox.width = Integer.parseInt(read.readLine());
System.out.print("Please Enter Height: ");
matchBox.height = Integer.parseInt(read.readLine());
System.out.print("Please Enter Depth: ");
matchBox.depth = Integer.parseInt(read.readLine());

matchBox.getVolume();
matchBox.displayVolume();
...
  

Подобным образом создается только один новый экземпляр MatchBox, и поскольку MatchBox является подклассом Box, он также автоматически обладает всеми атрибутами и свойствами, которые есть у Box.

Cobra_8