Java 介绍继承中的方法

Java 介绍继承中的方法,java,inheritance,Java,Inheritance,导入java.util.AbstractList 公共类ItemSet扩展了AbstractList{ private Item[] arr; private ItemClass itemClass; public ItemSet(Item item) { arr = new Item[1]; arr[0] = item; } /* * (non-Javadoc) * * @see java.util.AbstractList#add(java.lang.Object) */ @O

导入java.util.AbstractList

公共类ItemSet扩展了AbstractList{

private Item[] arr;
private ItemClass itemClass;

public ItemSet(Item item) {
arr = new Item[1];
arr[0] = item;
}

/*
 * (non-Javadoc)
 * 
 * @see java.util.AbstractList#add(java.lang.Object)
 */
@Override
public boolean add(Item e) {
boolean isNotAdded = true;
for (int i = 0; i < arr.length; i++) {
    if (e.getRule().compareTo(arr[i].getRule())) {
    if (e.getDot() == arr[i].getDot()) {
        isNotAdded = false;
        break;
    }
    }
}
if (isNotAdded) {
    Item[] oldArr = arr;
    arr = new Item[oldArr.length + 1];
    System.arraycopy(oldArr, 0, arr, 0, oldArr.length);
    arr[oldArr.length] = e;
}
return isNotAdded;
}

@Override
public Item get(int index) {
return arr[index];
}

@Override
public int size() {
return arr.length;
}

// SETTER

/**
 * @param itemClass
 *            the itemClass to set
 */
public void setItemClass(ItemClass itemClass) {
this.itemClass = itemClass;
}

//

// GETTER

/**
 * @return the itemClass
 */
public ItemClass getItemClass() {
return itemClass;
}
//
private Item[]arr;
私有ItemClass ItemClass;
公共项目集(项目){
arr=新项目[1];
arr[0]=物料;
}
/*
*(非Javadoc)
* 
*@see java.util.AbstractList#add(java.lang.Object)
*/
@凌驾
公共布尔添加(项目e){
布尔值isNotAdded=true;
对于(int i=0;i
}

如何覆盖实例删除方法?
如何不使用自己的列表实现?

如果不想实现接口中的其他方法,只需定义它们以引发异常:

public bool remove(Object o)
{
    throw new UnsupportedOperationException();
}

如果您甚至不想这样做,那么应该从类继承,而不是实现接口。

如果您不想继承remove(),那么就不要扩展
AbstractList
,而是将您想要的方法委托给
ArrayList

像这样(看在上帝的份上,不要评论你的创造者和创造者)

公共类项目集{
私有最终ArrayList项=新ArrayList();
私有ItemClass ItemClass;
公共项目集(项目){
项目。添加(项目);
}
公共布尔添加(项目e){
布尔值isNotAdded=true;
用于(项目:项目)
如果(例如getRule().compareTo(item.getRule()))
如果(e.getDot()==item.getDot()){
isNotAdded=false;
打破
}
//你为什么在这里加上?
如果(未添加)
增加(e)项;
未添加退货;
}
公共项获取(int索引){
返回项目。获取(索引);
}
公共整数大小(){
返回items.size();
}
公共无效setItemClass(ItemClass ItemClass){
this.itemClass=itemClass;
}
公共ItemClass getItemClass(){
返回itemClass;
}
}
}

你说的“封面”是什么意思?请澄清你的问题。我认为,他不想实现接口的其他方法。
ItemSet
不应该扩展
AbstractSet
吗?这是java编程的好风格吗?我认为这对调用堆栈来说是一个负担,不是吗?在ArrayList中调用add()是以固定时间运行的。在您的实现系统中,arraycopy()以O(n)时间运行。这些事情比可能增加调用堆栈产生了更大的差异,而调用堆栈可能会被优化掉(?)。更薄的公共接口也是更好的设计。在ArrayList中调用add()的运行时间是固定的。在您的实现系统中,arraycopy()以O(n)时间运行。我知道这一点,我必须以快速的方式写作,所以我不在乎这个。但是谢谢。更薄的公共界面也是更好的设计。你的意思是什么?一个薄的界面(暴露较少的方法)可以减少。
    public class ItemSet {
    private final ArrayList<Item> items = new ArrayList<Item>();
    private ItemClass itemClass;

    public ItemSet(Item item) {
        items.add(item);
    }

    public boolean add(Item e) {
        boolean isNotAdded = true;
        for (Item item : items)
            if (e.getRule().compareTo(item.getRule()))
                if (e.getDot() == item.getDot()) {
                    isNotAdded = false;
                    break;
                }
        // why are you adding here?
        if (isNotAdded)
            items.add(e);
        return isNotAdded;
    }

    public Item get(int index) {
        return items.get(index);
    }

    public int size() {
        return items.size();
    }

    public void setItemClass(ItemClass itemClass) {
        this.itemClass = itemClass;
    }

    public ItemClass getItemClass() {
        return itemClass;
    }
}
}