所以假设我有两种类型的对象,我不会提前知道将使用哪个对象。我想要应用在特定方法中使用哪个对象来做同样的事情。如何在不重复代码的情况下执行此操作?
例如:
if (input=1){
version1 version = new version1()
}
else{
version2 version = new version2()
}
**do something with version**
显然这种方式不会编译,但是我需要做些什么来完成我想要实现的目标?
也许我必须尝试抓住?对不起,我还是java的新手。
答案 0 :(得分:13)
您可以拥有一个名为Version
的超类
Version1
和Version2
扩展此超类。
然后你可以这样做:
Version version = null; // superclass reference
if (input == 1){
version = new Version1(); // instance of subclass Version1
}
else{
version = new Version2(); // instance of subclass Version2
}
// Now you can use the object version.
这在Java中称为运行时多态性 - 使用超类引用指向子类。 (因此,您不需要提前知道将使用哪个对象,正如您在问题中提到的那样:))。
或者,您也可以使用名为Version的Interface
而不是超类Version。
在这种情况下,Version1
和Version2
实施 Version
而不是扩展。
注意:强>
我建议您阅读Java中的继承和多态性。
还要尝试清楚地了解什么是接口,超类等。
Here is a SO link回答了问题'何时使用超类vs接口'。
答案 1 :(得分:4)
这是你在找什么?
public class Version1 implements Version{
//Version 1 stuff
}
public class Version2 implements Version{
//Version 2 stuff
}
然后你的代码:
Version version =null
if (input==1){
version = new Version1()
}
else{
version = new Version2()
}
//Do something with version
答案 2 :(得分:0)
您对Interfaces
的概念有多熟悉?您可以有两个类Version1
,Version2
实现Version
接口并执行以下操作:
Version version;
version = (input == 1)? new Version1() : new Version2();
您可以在此处阅读Interfaces
:Link
答案 3 :(得分:0)
您可以创建一个界面,然后以两个不同的版本实现该界面。
所以你会:
public interface InterfaceName {
public int method1();
}
public class version1 implements InterfaceName {
public int method1() {
//code for method1
}
}
public class version2 implements InterfaceName {
public int method1() {
//code to implement in a different way if needed
}
}
答案 4 :(得分:0)
您可以使类实现特定的接口,并将您的特定版本代码放在接口方法实现器
中class Version1 implements VersionInterface{
public void versionCode(){
/// your Version1 class specific code
}
}
class Version2 implements VersionInterface{
public void versionCode(){
/// your Version1 class specific code
}
}
VersionInterface version =null;
if (input=1){
version = new Version1()
}
else{
version = new version2()
}
version.versionCode(); // Runtime polymorphism