Calling (non public) methods from overriden method
我有一个覆盖问题(我相当新的东西),我将专门发布我的问题。
我创建了一个扩展
关于我必须做什么以及有关覆盖,我有几个问题。
首先,如果
我的第二个问题是关于覆盖。
我已经覆盖了方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @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); } |
至:
1 2 3 4 5 | @Override public E get(int index) { DoSomethingWithIndex... return elementData(index); } |
注意:我已将上面的代码包含在源代码中。
我没有覆盖这个。
我的问题是,我被告知无法找到
Firstly, if ArrayList implements and extends all it needs to, will my new class which extends ArrayList also"automatically" extend and implement the necessary classes and interaces.
是。例如,下面的类完全有效:
1 2 3 | public class MyList extends ArrayList<String> { // Empty! } |
无需实现任何内容或提及任何接口。
My problem is that I am told that
elementData (the return of my overwritten get method) cannot be found.
那就对了。
1 2 3 4 5 | @Override public E get(int index) { DoSomethingWithIndex... return super.get(index); // Delegate call to overridden method. } |
最后,扩展ArrayList很少是正确的做法。你应该几乎总是喜欢组合而不是继承。例如,见:
- 赞成合成而不是继承
- 喜欢构成而不是继承?
你可能想要Joshua Bloch的建议来自Effective Java,Second Edition,Item 16:Favor Composition to inheritance。
也就是说,不是直接扩展
在上述书中的示例中,
我完全不了解你的第二个问题,但对于第一个问题,答案是:是的。
使用ArrayList实现的所有内容都与您的子类一起实现。您只需要在代码中导入要显式使用的类,例如在覆盖某些内容时。