这是我第一次处理继承问题,我正在尝试创建 ArrayList 类的子类,但我很早就被阻止了。
import java.util.ArrayList;
/**
* extending to ArrayList
*/
public class SortedArrayList<E> extends ArrayList<E>
{
/**
* Inheriting the supers constructors
*/
public SortedArrayList()
{
super();
}
public void add(){
SortedArrayList.add(); // testing out inherited method.
}
}
但是,当我尝试编译它时,出现错误,“无法从静态上下文引用非静态方法 add()”
我做错了什么?
最佳答案
只是出于风格问题......我不认为你真的想这样做。
虽然 ArrayList 被记录为继承,但这并不典型。从未明确设计用于继承的基类跨越包边界进行子类化可能会使您的代码脆弱、容易出错且不安全。其原因是继承破坏了封装。您的子类变得依赖于基类的实现细节。
如果您正在编写新代码,我建议您使用以下样式替代方法来子类化 ArrayList:
- 改为子类 AbstractList(它记录并设计用于继承)
- 通过将 ArrayList 设置为私有(private)字段,使 ArrayList 成为 SortedArrayList 的实现细节(即优先于组合而不是继承);向现有类添加检测通常最好通过组合并将方法调用转发到所包含的实例来完成。
这些建议与《Effective Java》第二版中给出的建议非常一致。
关于java - 从 ArrayList 类继承出现问题, 'receiving non-static method can not be referenced in static context' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27259383/