Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接口编程是否包括扩展类_Java_Design Patterns - Fatal编程技术网

Java 接口编程是否包括扩展类

Java 接口编程是否包括扩展类,java,design-patterns,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; } }

我有以下课程

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方法。为什么会这样? 对接口编程似乎只适用于抽象类和接口

但是,我不能以这种方式查看setAddUserQuery方法。为什么会这样

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

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

不,完全不限于此。但是由接口或类定义的接口必须具有所需的特性。在您的情况下,DatabaseCall没有您需要的setAddUserQuery功能

可能是您应该将其添加到DatabaseCall,或者需要使用setAddUserQuery的特定代码需要写入功能更丰富的接口,其中包括setAddUserQuery;也许我们需要更多的细节


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

这是切片问题:DatabaseCall API不包括名为setAddUserQuery的方法。只有RegisterUserDetails具有该方法。您可以将该方法移动到超类中,也可以强制转换引用。如果您添加不属于父级契约的公共方法,并要求使用这些方法,则对抽象类和接口的编程将失败。这与孩子的父母碰巧是什么无关。为什么由于DatabaseCall不提供任何名为setAddUserQuery的方法-这是多态性的作用,RegisterUserDetails可以用作DatabaseCall,因为它扩展了DatabaseCall,但在这样做时,它只能执行DatabaseCall definesIs这是一个重复的操作,那里的答案回答了这个问题吗?提示:提出这样一个不清楚的问题并不完全是好的做法。然后走开,让那些试图帮助你的人没有任何反馈。。。这并不能改善情况。我真的很惊讶,我是第一个完成这个请求的人。