请考虑以下事项:
public class OuterClass {
static class NestedClass extends AbstractList<List<Integer>> {
void add(/* parameters here */) {
// note this method is not declared public
// print here does NOT appear in output
// implementation details here
}
public int size() {
// print here appears in output
// implementation details here
}
public List<Integer> get(int index) {
// print here appears in output
// implementation details here
}
}
public static List<List<Integer>> method(/* parameters here */) {
NestedClass nc = new NestedClass();
nc.add(..);
}
}
然后在另一个方法中,我创建了一个NestedClass
的实例。当我运行代码时,没有调用get
或size
,打印语句出现在输出中。这是怎么发生的?我了解get
和size
是必要的,因为AbstractList
已延长,但我从不调用size
或get
。
通常,如果B
扩展A
,那么对B
方法的任何调用都会固有地调用B
中实现的重写抽象方法吗?
由于
答案 0 :(得分:2)
这是抽象类/方法的重点:您的基类定义了抽象方法的集合 A ,以及非抽象方法的集合 B 。 / p>
现在,很可能, B 集合之外的方法将从 A 调用方法。
换句话说:您使用抽象类来修复某些行为(通过从 B 存储桶中编写方法),但是为了允许不同的整体行为,允许用户以不同的方式实现 A 方法(通过创建不同的子类,以不同的方式实现抽象方法)。
答案 1 :(得分:2)
AbstractList中的方法public boolean add(E e)
具有实现功能
致电add(size(), e)
。
方法public Iterator<E> iterator()
依赖于支持列表的size()
,get(int)
和remove(int)
方法。
以下是依赖get(int)
的方法列表: