【问题标题】:How to circumvent no static property inheritance in OOP?如何规避 OOP 中没有静态属性继承?
【发布时间】:2015-06-06 01:31:55
【问题描述】:

所以我有一大堆类继承了一个基类。每个类都需要有自己的一些值数组,基本上是一个静态数组,因为我不需要每个实例都有一个。但是由于静态变量不能被继承,我必须为每个单独的类声明这个静态数组,并覆盖在数组上操作的方法(即使方法总是相同的)。我能想到的唯一解决方案是使用非静态数组,但是我将为每个实例提供一个额外的数组。有什么办法可以绕过去吗?每个类只有一个数组,而不是声明多个相同的方法?

【问题讨论】:

  • 静态变量不能被继承?

标签: oop


【解决方案1】:

我必须为每个类声明这个静态数组

好吧,无论如何你都必须这样做。因为每个人都需要自己的数组版本。

出于明显的性能原因,您不需要实例数组,这是有道理的。但是如何使用实例方法 来访问数组?像这样的:

abstract class Widget
    static array MyValues = [1,2,3]

    abstract array GetValues
        return MyValues

    void DoSomething
        // reference GetValues instead of MyValues

然后在覆盖类中:

class SpecificWidget inherits Widget
    static array MySpecificValues = [2,3,4]

    override array GetValues
        return MySpecificValues

机制可能会根据所使用的语言而略有变化,但总体思路应该可行。每种类型都定义了一个可以被覆盖的实例方法,其唯一目的是充当一种访问值的工厂。

一旦像这样抽象出来,这些价值观基本上可以存在于任何地方。在静态数组中,在某个外部缓存中,在数据库中等。其余代码将耦合到抽象,而不是值的存储。

【讨论】:

  • 我想这是最简单的方法,在超类中说“每个类都有这个长度为 N 的数组”会很好,但它也节省了那些需要较小数组的人的空间数组的大小不同。
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
相关资源
最近更新 更多