从子类创建超类的正确方法

时间:2011-09-30 21:42:36

标签: java inheritance constructor client-server

我有一个客户端 - 服务器应用程序。

客户端有一个类:Item.java

public class Item
    public string name;
    public string size;

并且服务器有一个类PersistableItem.java,它允许我使用JPA

存储它
public class PersistableItem extends Item
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long Id;

并将其发送到执行addItemToServer方法的服务器:

public void addItem( Item item){
    //create PersistableItem from item
    DAO.save([paramerter = PersistableItem]);     
}

在我的服务器方法中,我将项目转换为PersistableItem吗?我是否在PersistableItem中创建了一个带有Item的构造函数?

这里的设计是什么?

2 个答案:

答案 0 :(得分:2)

正如您所建议的,您可以在SomePersistedItem中创建一个带有SomeItem的构造函数。在构造函数中,使用名称和大小调用super,因此可以正确填充SomePersistedItem。

public class SomePersistableItem extends SomeItem
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long Id;

    public SomePersistableItem(SomeItem originalItem) {
        super(originalItem.getName(), originalItem.getSize());
    }

你只需添加它。

public void addItem( someItem item){
    DAO.save(new PersistableItem(item));     
}

假设你在SomeItem中有一个带有名称和大小的构造函数。否则,您使用任何方法来构建SomeItem(Factory,setters ...)

答案 1 :(得分:0)

我会让你的可持续项扩展一个接口

public interface Persistable {
    boolean persist();
}

public class SomePersistableItem extends SomeItem implements Persistable {

}

public void addItem(Persistable p) {
    p.persist();
}