首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从overriden方法调用(非公共)方法

从overriden方法调用(非公共)方法
EN

Stack Overflow用户
提问于 2015-06-10 21:26:44
回答 3查看 67关注 0票数 2

我有一个问题的覆盖(我是相当新的东西),我会特别张贴我的问题。

我已经做了一个扩展ArrayList的类。

我有几个问题,关于我必须做什么和关于越权。

首先,如果ArrayList实现并扩展了它所需要的一切,那么扩展ArrayList的新类也会“自动”扩展和实现所需的类和接口吗?我很想假设是的,因为我知道你只能扩展一个类。

我的第二个问题是关于越权。

我从以下位置重写了方法get()

代码语言:javascript
复制
@SuppressWarnings("unchecked")
E elementData(int index) {
    return (E) elementData[index];
}

/**
 * Returns the element at the specified position in this list.
 *
 * @param  index index of the element to return
 * @return the element at the specified position in this list
 * @throws IndexOutOfBoundsException {@inheritDoc}
 */
public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}

至:

代码语言:javascript
复制
@Override
public E get(int index) {
    DoSomethingWithIndex...
    return elementData(index);
}

注意:我已经在源代码中包含了上面的代码。E elementData..。

不过,我并没有覆盖这篇文章。

我的问题是,我被告知无法找到elementData (返回我重写的get方法)。我也要推翻它吗?它不是用ArrayList扩展的吗。我不明白为什么找不到它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-10 21:30:46

首先,如果ArrayList实现并扩展了它所需要的一切,那么扩展ArrayList的新类也会“自动”扩展和实现所需的类和接口吗?

是。例如,下面的类是完全有效的:

代码语言:javascript
复制
public class MyList extends ArrayList<String> {
    // Empty!
}

不需要实现任何东西或提到任何接口。

我的问题是,有人告诉我,无法找到elementData (返回重写的get方法)。

没错。elementData是私有的,不能在子类中访问。相反,使用

代码语言:javascript
复制
@Override
public E get(int index) {
    DoSomethingWithIndex...
    return super.get(index);  // Delegate call to overridden method.
}

最后,扩展ArrayList很少是正确的。你几乎应该总是倾向于组合而不是继承。例如,见:

票数 2
EN

Stack Overflow用户

发布于 2015-06-10 21:31:30

我不完全理解你的第二个问题,但对于第一个问题,答案是肯定的。用ArrayList实现的所有东西也都是用子类实现的。您只需要导入要在代码中显式使用的类,例如,当您重写某些内容时。

票数 1
EN

Stack Overflow用户

发布于 2015-06-10 21:41:42

您可能想听听约书亚·布洛赫来自有效Java,第二版的建议,第16项:喜欢组合而不是继承。

也就是说,不是直接扩展ArrayList,而是创建一个包装它的类,它也实现了List。这样,您还可以避免在实现中出现一些未记录在案的问题。

在上述书中的示例中,HashSetaddAll调用了它的add方法,但并没有被记录为这样做,因为编写时没有考虑到继承。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30767595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档