Как мне получить доступ к методам из класса с помощью объекта из другого?

#inheritance #polymorphism

#наследование #полиморфизм

Вопрос:

Я новичок в объектной ориентации, и я думаю, что это я пытаюсь использовать полиморфизм, а также делаю это ужасно, но мне нужна помощь. У меня есть мой класс DSAQueue, который должен создавать очередь, но сделан из массива. Однако у меня есть другой класс, называемый ShufflingQueue, который отвечает за перетасовку всех элементов массива вперед и назад. Как мне, по сути, создать объект DSAQueue и создать очередь, а также использовать метод из класса ShufflingQueue?

 public class DSAQueue
{
    public static int DEFAULT_CAPACITY = 100;

    //Classfields
    Object[] queue = null;
    int count;
  
    //default constructor 
    public DSAQueue()
    {
        queue = new Object[DEFAULT_CAPACITY];
        count = 0;
    }
}
  
 public class ShufflingQueue extends DSAQueue
{
    public void enqueue(int value)
    {
        queue[count] = value;
        count  ;
    }
}
    

public static void main(String[] args)
{

    DSAQueue queue = new ShufflingQueue();

    //Declare DSAqueues 
    queue = new DSAQueue();

    //Fill the second queue up
    for (int i = 0; i < 40; i  )
    {
        queue.enqueue(2 * i   (i / 4));
    }
}
  

Ответ №1:

Не могли бы вы, пожалуйста, немного подробнее рассказать о том, чего вы пытаетесь достичь? Если я правильно понимаю, вы хотите запустить конструктор класса DSAQueue, а затем заполнить объект queue методом enqueue от ShufflingQueue? Если это так, то вы можете просто переключить эти две строки:

 DSAQueue queue = new ShufflingQueue();
//Declare DSAqueues
queue = new DSAQueue();
  

С помощью этого:

 ShufflingQueue queue = new ShufflingQueue();
  

Потому что, если у вас нет аргумента внутри конструктора базового класса, то он будет запущен автоматически. Если у вас будет конструктор с аргументом, тогда вам нужно будет вызвать метод super () из конструктора производного класса и передать аргумент.