如何覆盖新类中现有类的一部分?

时间:2014-07-15 15:18:32

标签: java inheritance override enumeration properties-file

我想使用this question中的以下代码,以按字母顺序对属性进行排序:

Properties tmp = new Properties() {
    @Override
    public synchronized Enumeration<Object> keys() {
        return Collections.enumeration(new TreeSet<Object>(super.keySet()));
    }
};

但是,不是实例化一个Properties对象,而是每次都表明我希望它是按字母顺序排列的,我怎么能创建一个继承Properties的类,其唯一的目的是明确地覆盖这个方法?

public class MyProperties extends Properties
{
    @Override
    public synchronized Enumeration<Object> keys() {
        return Collections.enumeration(new TreeSet<Object>(super.keySet()));
    }
}

希望能够做到这一点:

MyProperties p = new MyProperties();

...让它的工作方式与其键被排序的Properties对象完全相同!

不知怎的,我不觉得这很容易,是吗?我是否需要做一些事情,比如打电话给超级的构造函数?这对我来说有点不清楚,但我觉得它有可能做到。我每次制作一个Properties对象时都不要覆盖一个方法!

谢谢!

2 个答案:

答案 0 :(得分:0)

你可以完全按照上面所写的那样做;您编写的示例类将编译并执行您正在寻找的内容。定义与某些超类有一个或两个细微差别的类型是继承的最常见用法之一! [Citation Needed]

答案 1 :(得分:0)

看来我的想法完全正确!多么可爱的Java!

代码将被编译,因为Properties类的所有方法和构造函数都是通过扩展该类而自动继承和实现的。我不需要编写任何特殊的东西来指示这些方法在那里,并且在子类中编写的任何其他方法都可以覆盖或附加到原始父类。

欢呼尼克霍尔特提醒我,通过尝试一个想法,我不会破坏任何东西。有时很难实现这一飞跃,一些程序员在尝试使用一段代码时犹豫不决,如果他们不确定的话。