当前位置:  开发笔记 > 编程语言 > 正文

有一个扩展另一个类的"空"类是否可以?

如何解决《有一个扩展另一个类的"空"类是否可以?》经验,为你挑选了1个好方法。

假设我有一个类Foo中有一堆逻辑,另一个类Bar基本相同.然而,作为FooBar不同(但相关)的实体,我需要从我的代码中明显区别(即我可以判断一个实例是a Foo还是a Bar)

当我在没有多想的情况下一起打击这个时,我最终得到了以下内容:

public class Foo {
  /* constructors, fields, method, logic and what-not */
}

public class Bar extends Foo {
  /* nothing here but constructors */ 
}

这个可以吗?Bar复合课程更好吗?例如:

public class Bar {
  private Foo foo;

  /* constructors and a bunch of wrapper methods that call
     into foo */
}

或者甚至,当我们在它的时候,更低技术的东西:

public class Foo {
  /* constructors, fields, method, logic and what-not */

  private boolean isABar; // Could be an enum
}

你怎么看?你如何处理这些'标记类'?


作为如何我的代码不妨把一个例子FooBar不同,我的代码将需要能够做的东西一样ListList.A Foo不能进入,List反之亦然.



1> Chris Jester..:

在我看来,最好是FooBar子类关闭一个共同的祖先类(也许AbstractFoo),它具有所有功能.在Foo和之间应该存在什么样的行为差异Bar?将差异编码为抽象方法AbstractFoo,而不是if在代码中使用语句.

示例:而不是:

if (foo instanceof Bar) {
    // Do Bar-specific things
}

改为:

class Bar extends AbstractFoo {
    public void specialOp() {
        // Do Bar-specific things
    }
}

// ...
foo.specialOp();

这种方法的好处是,如果你需要第三个类,这很像Foo但只有一点点差别,你不必遍历所有代码并添加编辑所有if语句.:-)

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有