Member 11018842 Ответов: 2

Как получить доступ к статической переменной подкласса через цикл for?


Привет!

У меня есть суперкласс под названием product и 3 подкласса под названием Laptop, Web и Microphone. В каждом подклассе a создается статическая переменная, которая подсчитывает количество продуктов из каждого класса. Я создал список массивов, который показывает продукты из каждого объекта, но моя проблема заключается в том, что я не знаю, как вызвать статическую переменную, назначенную каждому объекту.

Что я уже пробовал:

Страница подкласса ноутбук:

public class laptop extends Products {
     static int stock=0;
    public laptop(String name, String color, Double price, Double discount) {
        super(name, color, price, discount);
        stock++;

 public static int getStock() {
        return stock;
    }
    }


Класс списка массивов, который создает объекты:

<pre>ArrayList <Products> catalog = new ArrayList<>();
        catalog.add( new web("web", "red", 145.0, 1.0));
        catalog.add( new microphone("microphone", "red", 145.0, 1.0));
        catalog.add( new laptop("laptop", "red", 145.0, 1.0));


Итак, если бы я позвонил в web.getStock, все работает нормально, и я могу получить доступ к акциям. Но если я хочу отобразить список с помощью цикла for, я действительно не знаю, как получить доступ к запасам каждого продукта.

<pre>   for(int i=0; i<catalog.size(); i++){
           System.out.println(catalog.get(i).name + " " + (Here! I don't know how to acces the static variable of each catalog.get(i).name);

2 Ответов

Рейтинг:
6

CPallini

Определите абстрактный метод в Product класс и переопределить его в производных. Например

abstract class Product
{
  String name;
  public Product(String name)
  {
    this.name = name;
  }
  public abstract int getStock();
}

class Laptop extends Product
{
  static int stock = 0;
  public Laptop(String name)
  {
    super(name);
    ++stock;
  }
  @Override
  public int getStock()
  {
    return stock;
  }
}
 //...
 // in main method
    ArrayList <Product> catalog = new ArrayList<Product>();
    catalog.add( new Laptop("foo") );
    catalog.add( new Laptop("goo"));
    System.out.println( catalog.get(1).getStock() );


Member 11018842

Это сработало. Большое спасибо.

CPallini

А вы сомневались по этому поводу? :-D
Добро пожаловать.

Member 11018842

Если бы у меня было, скажем, 5 типов ноутбуков, как я могу сохранить доказательства запасов для каждого из них? Должен ли я создавать общедоступные классы для каждого типа ноутбука или просто создавать статические переменные(для каждого типа ноутбука) в классе ноутбука? Как это используется на практике?

CPallini

Вы должны создавать разные классы, если они вам нужны (например, разные состояния или поведение). Не создавайте разные классы только для того, чтобы различать количество их экземпляров.

Рейтинг:
1

Richard MacCutchan

Почему бы не использовать отдельные списки для каждого типа продукта, чтобы вы могли просто использовать Класса ArrayList.размер()[^] чтобы получить графа?


Member 11018842

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

Richard MacCutchan

В этом нет никакого смысла. Если вы используете базу данных, то вам вряд ли понадобится такой список.

Member 11018842

Я выразился неправильно. Я просто хочу сказать, что если бы у меня было 100 различных продуктов, то код был бы очень сложным.

Richard MacCutchan

Нет, если ты все сделаешь правильно.