Java抽象领域模式

时间:2013-10-15 00:03:33

标签: java oop abstract

我不确定如何描述我想要的这种模式,但我想要这样的事情:

public abstract class Parent {
    protected abstract boolean foo = false; //this doesn't compile
}

public class Child1 extends Parent {
    protected boolean foo = true;
}

我该怎么做?

想象一下,我有1 Parent个班级,但是有20个Child班级。对于绝大多数孩子,foo应为false。但是,Child1(和其他几个)是foo = true;的奇怪之处。

最合适的面向对象设计是什么,但是编写有效的方法呢?

5 个答案:

答案 0 :(得分:2)

首先,实例变量不能是abstract,只有方法可以。

要拥有覆盖行为,您需要方法。我会在isFoo中定义一个方法,例如Parent,该方法被定义为返回false。没有子类需要覆盖它,除了“怪异的”,它可以覆盖它以返回true

或者,您可以将Parent的子类称为WeirdOne(当然不必是该名称)。它唯一能做的就是覆盖isFoo以返回true。然后Child1和任何其他“怪异”类子类WeirdOne。这样,它只在一个地方被覆盖。

答案 1 :(得分:2)

您可以使用一两个构造函数执行此操作:

public abstract class Parent {
    protected boolean foo;
    protected Parent() {
        this(false); // initialize foo to default value
    }
    protected Parent(boolean fooValue) {
        this.foo = fooValue;
    }
}

public class Child1 extends Parent {
    public Child1() {
        super(true);
    }
}

public class Child2 extends Parent {
    // no explicit super(boolean) call in c'tor gives foo the default value
}

答案 2 :(得分:1)

我认为你需要这样做

public abstract class Parent {

    protected boolean check = false;

}

public class Child extends Parent 
{
    public void method()
    {
        this.check=true;
    }

}

//你也可以把它放在构造函数中

答案 3 :(得分:0)

如果要使用Parent类扩展Child1类,则必须输入:

public class Child1 extends Parent {

}

关于foo参数,您不能将其设置为abstract,因为它不是函数(也就是说,只能声明函数abstract)。但是,您可以在子类中覆盖它。

public abstract class Parent {
    protected boolean foo = false;
}

public class Child1 extends Parent {
    @Override
    protected boolean foo = true;
}

答案 4 :(得分:0)

不要使用字段。看看这个类的组合:

public abstract class Vehicle {
    public abstract boolean isAerial();
}

public abstract Flyer extends Vehicle {
    @Override
    public final boolean isAerial() {
        return true;
    }
}
// Add Airplane, Helicopter, Dirigible, Rocket, etc.

public abstract Terrestrial extends Vehicle {
    @Override
    public final boolean isAerial() {
        return false;
    }
}
// Add Car, Truck, Boat, Bicycle, etc.