如何在java中使用父的方法和son的变量?

时间:2013-11-19 12:55:04

标签: java oop inheritance abstract-class

由于我的代码内容很长,我会尽量保持抽象。 所以,我有一个抽象的父亲,包含适用于所有儿子的方法。

abstract class a {
 protected final void a_method() {
  ...do stuff
 }
}

我还有另外两个扩展

的类
class b extends a {
  static int _int = 3;
}

还有,

class c extends a {
  static int _int = 2;
}

所以如你所见,我的所有b总是具有相同的静态_int变量,并且我的所有c总是具有相同的_int变量。 方法a_method()与两个儿子的代码完全相同,只是使用了儿子的变量。 我可以避免重复代码吗? 因为我的变量是静态的,所以我不能在a中声明它,因为每个子类的类需要不同(每个扩展类的内容不同)

3 个答案:

答案 0 :(得分:2)

更简单的方法是在类A中使用抽象方法返回子类int值。

abstract class a {
    protected final void a_method() {
       int i = getValue();

       ...do stuff
    }

    protected abstract int getValue();

}

在你的子类之后

class b extends a {
    static int _int = 3;

    protected int getValue() {
       return _int;
    }
}

答案 1 :(得分:1)

静态意味着变量属于Class而不是单个实例。由于您的需求是静态变量,在两个类中都有不同的值,因此您的问题不会被视为代码重复。

如果它不是静态的,你可以在类中定义变量,然后在b类和C类构造函数中初始化它。

答案 2 :(得分:1)

我在这种情况下使用的解决方案是a,b和c都实现了一个声明int getTheVariable()的接口。这个方法是抽象的。

然后在getTheVariable()中使用了a。返回的值由具体实现决定。

interface Foo {
     int getTheVariable();
}

abstract class A implements Foo {
    abstract int getTheVariable();
    int doSomeWork() {
        return 5 * getTheVariable();
        }
    }

class B extends A implements Foo {
    int getTheVariable() { return 3; }
    }

class C extends A implements Foo {
    int getTheVariable() { return 2; }
    }

我没有尝试编译它,它应该是接近的。

现在'父'类A可以提供主代码,但可以根据需要使用B和C中的值。这些值中的值可以是静态的。