Java对象 - 避免重复代码

时间:2014-08-08 17:33:29

标签: java inheritance

所以假设我有两种类型的对象,我不会提前知道将使用哪个对象。我想要应用在特定方法中使用哪个对象来做同样的事情。如何在不重复代码的情况下执行此操作?

例如:

if (input=1){
    version1 version = new version1()
}
else{
    version2 version = new version2()
}

**do something with version**

显然这种方式不会编译,但是我需要做些什么来完成我想要实现的目标?

也许我必须尝试抓住?对不起,我还是java的新手。

5 个答案:

答案 0 :(得分:13)

您可以拥有一个名为Version的超类 Version1Version2 扩展此超类。

然后你可以这样做:

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。 在这种情况下,Version1Version2 实施 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的概念有多熟悉?您可以有两个类Version1Version2实现Version接口并执行以下操作:

Version version;

version = (input == 1)? new Version1() : new Version2();

您可以在此处阅读InterfacesLink

答案 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