如何限制直接调用超类型类的方法,并且只能使用Java中的子类型实例通过子类型类方法访问?

时间:2018-10-22 14:16:13

标签: java

我正在编写扩展ArrayList类的算法。在这里,使用算法类的实例,可以调用ArrayList的所有方法。我如何限制只能调用算法类中定义的方法,算法类只能访问所有通过自己的方法ArrayList的方法? 谢谢

2 个答案:

答案 0 :(得分:0)

请勿扩展ArrayList。而是将其实例化为私有成员字段。这样,您就可以完全控制列表。例如

public class YourList<T> {
    private ArrayList<T> list;

    public YourList() {
        list = new ArrayList<>();
    }
    // example method
    public void add(T t) {
        list.add(t);
    }

}

我添加了类型参数T,因为您不想使用原始类型。您将像这样使用它

YourList<String> list = new YourList<>();
list.add("String");
YourList<Integer> otherList = new YourList<>();
list.add(1);

答案 1 :(得分:0)

您不必“强迫”用户调用您的子类。

根据设计,在给定ArrayList子类的实例的情况下,Java将仅运行子类中重写的方法。超类ArrayList将提供API(您不能阻止其他类访问超类中声明的公共方法),但是所有重写的方法都将按照子类中的定义运行。

您的子类然后可以选择在适当时使用ArrayList关键字在super中运行方法实现。