java - 为什么扩展抽象类的类中的方法即使没有被调用也会运行?

标签 java inheritance abstract-class extends

考虑以下因素:

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 的实例。当我运行代码时,没有调用 getsize ,打印语句出现在输出中。这是如何/为何发生的?我明白getsize是必要的,因为AbstractList已扩展,但我从不调用 sizeget .

一般来说,如果 B延伸A ,是否会调用 B 的方法本质上调用 B 中实现的重写抽象方法?

谢谢

最佳答案

这就是抽象类/方法的全部要点:您的基类定义了一组抽象方法A,以及一组B非抽象方法。

现在,最有可能的是,B 之外的方法将调用 A 中的方法。

换句话说:您使用抽象类来固定某些行为(通过从B存储桶中编写方法),但为了允许不同的总体行为,您允许用户以不同的方式实现方法(通过创建不同的子类,以不同的方式实现抽象方法)。

关于java - 为什么扩展抽象类的类中的方法即使没有被调用也会运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50342245/

相关文章:

java - 谁在线程完成时通知它?

c++ - 配置类也使用继承时的继承

c++ - 无法将变量 ‘’ 声明为抽象类型 ‘’

Java Generics - 抽象类抽象函数覆盖

c++ - 这是使用抽象类数组 (C++) 的正确方法吗?

java - 如何将 3D 矩阵逆时针旋转 90 度?

java - 如何从 MethodArgumentNotValidException 类中提取字段名称和错误消息?

java - sigmoid 的单神经元 delta 规则收敛

python - 通过多个类进行类继承

c++ - 为什么 gcc 和 clang 允许我构造一个抽象类?