加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 有一个扩展另一个类的’空’类可以吗?

发布时间:2020-12-14 05:32:37 所属栏目:Java 来源:网络整理
导读:假设我有一个类Foo,它有一堆逻辑,另一个类Bar基本相同.然而,由于Foo和Bar是不同的(但相关的)实体,我需要从我的代码中明显的区别(即我可以判断一个实例是一个Foo还是一个Bar) 当我在一起打仗时,没有多大的想法,我结束了以下几点: public class Foo { /* cons
假设我有一个类Foo,它有一堆逻辑,另一个类Bar基本相同.然而,由于Foo和Bar是不同的(但相关的)实体,我需要从我的代码中明显的区别(即我可以判断一个实例是一个Foo还是一个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,logic and what-not */

  private boolean isABar; // Could be an enum
}

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

作为我的代码可能希望对待Foo和Bar的一个例子,我的代码将需要能够像List&Foo>和列表< Bar>. A Foo无法进入列表< Bar>反之亦然.

解决方法

在我看来,最好是Foo和Bar将一个共同的祖先类(可能是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语句.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读