0

我不是那么好的OO设计..所以请多多包涵..

我有 A 类和 2 个扩展 A 的类。但它们都有相同的字段。所以更好的是,在 A 中使用 getter/setter 或在两个子类中使用相同的 getter/setter。或者是否有一个更好的方法来做到这一点..?

这就是我所做的(模拟)..

 class A{

    private int x;

    protected A(int x){
    this.x = x;
    }

    public static A createA(id a, int x){
    switch(a){
    case 0: 
    return new C(x);
    break;
    //so on

    }


    public int getX(){
    return x;
   }

    }

谢谢..

4

2 回答 2

2

这取决于类

如果这些属性是 A 的属性,那么是的,如果只是机会它们具有相同的属性,那么不是。

基本上你需要问自己的问题是,是否会有一个扩展 A 的类不需要这些属性。

如果答案是否定的,则将它们放在 A 上,

如果答案是肯定的,请将它们保留在子类中,或者在这两个子类之间创建另一个抽象类,具有这两个属性。

于 2013-02-19T13:53:31.647 回答
1

假设您的班级是A(父母)和BC孩子)。你这么说B并且C有一些相同的字段。

问问自己:如果你有另一个类D,它的子类,A不管它的具体功能如何,它是否也会有这些字段?

  • 如果答案是肯定的,那么这两个子类中这些字段的存在绝对不是巧合,所以你可能应该在 中定义它们A,因为这意味着它们具有这些成员正是因为它们继承自A

  • 如果答案是否定的,那么子类中这些字段的存在可能是巧合,也可能不是巧合。所以,你应该扪心自问:即使D没有这些领域,它们在两者中的存在BC看起来不仅仅是巧合吗?这些类是否共享 的D另一个孩子A根本不会共享的东西?

    • 如果是,那么考虑一个新的类Eextends AE定义这些公共成员,然后 makeBCchildren ofE而不是A

    • 如果不是(如果在你看来只是巧合),那么就让你的结构保持原样。或者考虑一个接口。

于 2013-02-19T13:54:23.973 回答