2014-10-23 3 views
0

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

public class Basket extends ArrayList<Product> implements Serializable 
{ 
    private static final long serialVersionUID = 1; 
    private int theOrderNum = 0;   // Order number 

    /** 
    * Constructor for a basket which is 
    * used to represent a customer order/ wish list 
    */ 
    public Basket() 
    { 
    theOrderNum = 0; 
    } 
} 

Подкласс Я использую ниже, я попытался Collections.sort показанного ниже под super.add, но по какой-то причине она не позволит мне получить доступ к супер классу, вот что я пытался.

public class BetterBasket extends Basket implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 
     @Override 
     public boolean add(Product pr) // Add a product to the 
     {    
      super.add(pr); 
      Collections.sort(super, super.get(0).getProductNum());  

     } 
} 

Я пытаюсь сортировать его по номеру продукта, хранящемуся в суперклассе, показанном в первом примере.

+0

Используйте это вместо супер. – sturcotte06

ответ

2

Вы можете просто обратиться к this объекта, поскольку он уже расширяет ArrayList и удерживает элементы, добавленные с помощью super.add(pr) и что вы хотите отсортировать:

Collections.sort(this, .... 

Второй параметр должен быть Comparator реализации, а не первый элемент в списке.

Collections.sort(this, new Comparator<Product>() { 
    @Override 
    public int compare(Product p1, Product p2) { 
      return p1.getProductNum() - p2.getProductNum(); 
    } 
}); 
2

Метод Collection.sort() ожидает, либо коллекции объектов, которые реализуют Сопоставимыми или коллекцию объектов и объект компаратора, который позволяет сравнивать их.

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

Вы должны прочитать на Comparator и построить Comparator, который знает, как сравнить два Product объектов, или написать Product так, что он реализует Comparable.

Другое дело, что вы не можете получить доступ к члену вашего суперкласса private из подкласса. Это очень простая концепция в объектно-ориентированном программировании. Вы можете получить доступ только к защищенным, общедоступным или доступным по пакетам полям.

Если у вас есть видимое (защищенное/общедоступное/доступное для пакета) поле, вам не нужно использовать ключевое слово super для доступа к нему, поскольку идея расширения класса заключается в том, что вы наследуете его поведение и его состояние , поэтому, если поле видимо, вы можете просто получить к нему доступ по его имени или this .name.

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

Смежные вопросы