#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