对接口的编程是否包括扩展类

时间:2017-04-03 23:00:55

标签: java design-patterns

我有以下课程

public class RegisterUserDetails extends DatabaseCall {
public String setAddUserQuery(User user){
  //code

  return query;
 }
}

这是DatabaseCall类

public class DatabaseCall {
public ResultSet executeQuery(String query){
//code
return rs;
}

}

我试图通过这样做来编程到超类型/接口

DatabaseCall dbCall = new RegisterUserDetails();

但是我无法以这种方式查看setAddUserQuery方法。为什么是这样? 对接口的编程似乎只适用于抽象类和接口?

1 个答案:

答案 0 :(得分:0)

  

但是我无法以这种方式查看setAddUserQuery方法。这是为什么?

因为DatabaseCall没有setAdduserQuery。您对该对象的接口没有该方法。

  

对接口的编程似乎只适用于抽象类和接口?

不,它完全不受此限制。但是您拥有的接口(由接口或类定义)必须具有您需要的功能。在您的情况下,DatabaseCall没有您需要的功能(setAddUserQuery)。

可能应该将其添加到DatabaseCall,或者需要将需要使用setAddUserQuery的特定代码写入功能更丰富的界面(包含{{1}的界面也许setAddUserQuery)。

但是编程到接口的目标是编程所需的功能,而不是具体的类型。界面(所需功能)仍然必须具备您需要的所有功能。例如,您编程为RegisterUserDetails而不是List,因为ArrayList具有您需要的所有功能,因此无需使用具体类型,稍后您可能会发现它很有用改为使用List