为子类设置超类属性

3

我遇到了一个问题,即在超类类型的情况下无法正确设置我的属性。

我有两个类,B类是A类的一个特殊版本,假设...

public class A {
    private String name;
    private int id;
    ...
} 

public class B extends A {
    private Date time;
    private int status;
    ...
}

现在我想要使用一种用于将结果集中的属性设置到A中的方法,而是将它们设置在B的实例中。
public A setProperties(ResultSet rs) {
    A a = new A();
    a.setName(rs.getString(...));
    ...
    return a;
}

我已经尝试将此返回值转换为B类型,但是不是所有的A都是B,所以这种方法行不通。我还尝试向setProperties方法添加另一个参数,使其接受一个A并返回一个A,这样我就可以使用多态来获取我的B,但是然后所有的值都被清空了。

对于此问题,我感到无助,非常感谢任何建议。

1个回答

6

在超类中声明方法。子类将重写该方法,然后调用super.foo(ResultSet rs),其中foo(...)是被重写的方法。在那里,您可以解析ResultSet并设置对象的字段。

示例 -

class Foo{
    void setProperties(final ResultSet rs){
        // do stuff
    }
}

final class Bar extends Foo{
    @Override
    final void setProperties(final ResultSet rs){
        // do stuff
        super.setProperties(rs);
    }
}

更多信息请参见使用关键字super


我得试一下。如果我不在子类中覆盖该方法,那么设置超类属性仍然有效,对吗? - Shaded
如果您在子类中没有显式覆盖setProperties,但仍在子类实例上调用它,则属性将在超类中设置。 - mre
我仍然有一个问题,我在A.setProperties()中检查名称,它显示正常。方法返回后,我在B.setProperties()中再次检查它,但它为空。有什么想法吗? - Shaded
当您在父类和子类中有重复命名的变量时,这确实不会有所帮助...感谢您的帮助! - Shaded

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接