如何定义类和接口层次结构?

时间:2017-05-05 07:41:48

标签: java

我对如何为以下场景定义类和接口层次结构感到困惑。

以下是接口

public interface Save {
    public void save(List<Object> pojoList);
    public void save(String query);
} 

public interface Update {
    public void update(List<Object> pojoList, List<String> conditionList);
    public void update(String query);
} 

public interface Delete {
    public void delete(String query);
} 

以下是课程:

Class DbOperations {
}

class SaveOperation extends DbOperations implements Save {
}

class UpdateOperation extends DbOperations implements Update {
} 

所以我担心的是:

  1. 我想使用DbOperations实例(基类)调用SaveOperation,DeleteOpration类方法

  2. 你能告诉我哪个班级应该是哪个界面吗?

  3. 对上述层次结构的任何修改??

  4. 提前致谢

2 个答案:

答案 0 :(得分:0)

关于你的担忧,

  

我想使用实例调用SaveOperation,DeleteOpration类方法   DbOperations(基类)

我想,它会是这样的:

DbOperations op = new SaveOperation(/*Params*/);

// Check type to cast
if(op instanceof Save)
{
    // Cast to Save and call method
    ((Save)op).save(/*Params*/);
}

// For delete
if(op instanceof Delete)
{
    // Cast to Save and call method
    ((Delete)op).delete(/*Params*/);
}

所以,你不需要任何修改。

答案 1 :(得分:0)

通过使用多个类实现的接口,您可以定义一个方法,该接口将接口作为参数并调用其中一个方法,然后该调用的结果将取决于该接口的实际类型运行时。

那就是说,我没有看到定义DbOperation的任何优势,DbOperation没有定义其类将继承的任何方法。

如果你有理由这样做(这是可能的,如果你编写的代码只是你的场景的简化),从语义的角度来看,我会发现DbOperations更有意义层次结构的根接口,SaveUpdateDelete作为实际类和根之间的抽象类(或接口):

public interface DbOperation {
    public String thisOperation();
}

public abstract class Save implements DbOperation {
    public String thisOperation(){
        return "Save";
    }

    public void save(List<Object> pojoList);
    public void save(String query);
} 

public abstract class Update implements DbOperation{
    public String thisOperation(){
        return "Update";
    }

    public void update(List<Object> pojoList, List<String> conditionList);
    public void update(String query);
} 

public abstract class Delete implements DbOperation {
    public String thisOperation(){
        return "Delete";
    }

    public void delete(String query);
} 

class SaveOperation implements Save {
}

class UpdateOperation implements Update {
}