标签: abstract-class

如何通过使用接口或抽象来确保类具有静态属性?

我有一个抽象类-let说myBase.我希望从myBase派生的所有类都有一个名为的静态字段

public static List<string> MyPArameterNames 
{
get {return _myParameterNames;} 
}
Run Code Online (Sandbox Code Playgroud)

因此,每个子类都可以告诉它使用哪些参数名称; 我想要静态,因为我不想为此创建一个实例.

我怎样才能做到这一点?

c# static abstract-class overriding interface

27
推荐指数
3
解决办法
2万
查看次数

从函数返回一个抽象类

是否有可能从函数返回一个抽象类(类本身或引用,无关紧要)?

c++ abstract-class

27
推荐指数
3
解决办法
3万
查看次数

如果我在php中使用抽象类有什么好处?

可能重复:
接口与抽象类

如果我在php中使用抽象类有什么好处?

如果我使用抽象类或接口,目的是什么?

两者都只是简单地用身体创造防御名称

php oop abstract-class

26
推荐指数
2
解决办法
3万
查看次数

一个抽象类可以扩展另一个抽象类并增加功能

我有一个抽象的课.我想通过另一个抽象类扩展抽象类,然后实现扩展的抽象类.是否可能.如果是的话,对于OOPS来说,这是否是一个好的方法?

java oop abstract-class

26
推荐指数
2
解决办法
5万
查看次数

为什么坚持接口的所有实现都扩展了基类?

我只是看着GitHub上的Java Hamcrest代码,并注意到他们采用了一种似乎不直观和笨拙的策略,但它让我想知道我是否遗漏了一些东西.

我在HamCrest API中注意到有一个接口Matcher和一个抽象类BaseMatcher.Matcher接口使用此javadoc声明此方法:

    /**
     * This method simply acts a friendly reminder not to implement Matcher directly and
     * instead extend BaseMatcher. It's easy to ignore JavaDoc, but a bit harder to ignore
     * compile errors .
     *
     * @see Matcher for reasons why.
     * @see BaseMatcher
     * @deprecated to make
     */
    @Deprecated
    void _dont_implement_Matcher___instead_extend_BaseMatcher_();
Run Code Online (Sandbox Code Playgroud)

然后在BaseMatcher中,此方法实现如下:

    /**
     * @see Matcher#_dont_implement_Matcher___instead_extend_BaseMatcher_()
     */
    @Override
    @Deprecated
    public final void _dont_implement_Matcher___instead_extend_BaseMatcher_() {
        // See Matcher interface for an explanation …
Run Code Online (Sandbox Code Playgroud)

java inheritance abstract-class interface hamcrest

26
推荐指数
2
解决办法
1266
查看次数

TypeScript中的抽象构造函数类型

TypeScript中非抽象类(非抽象构造函数)的类型签名如下:

declare type ConstructorFunction = new (...args: any[]) => any;
Run Code Online (Sandbox Code Playgroud)

这也称为类型.但是,我需要一个抽象类的类型签名(抽象构造函数).我的理解是可以被定义为具有类型Function,但就是这样过于宽泛.难道没有更精确的替代方案吗?


编辑:

为了澄清我的意思,下面的小片段演示了抽象构造函数和非抽象构造函数之间的区别:

declare type ConstructorFunction = new (...args: any[]) => any;

abstract class Utilities {
    ...
}

var UtilityClass: ConstructorFunction = Utilities; // Error.
Run Code Online (Sandbox Code Playgroud)

类型'typeof Utilities'不能分配给'new(... args:any [])=> any'.

无法将抽象构造函数类型分配给非抽象构造函数类型.

constructor abstract-class typescript

26
推荐指数
2
解决办法
1万
查看次数

使用Java [接口/抽象类]

最近我决定看看Java,所以我还是很新的,也是OO编程的方法,所以我想在学习更多东西之前先做一些事情,(我想它永远不会很快从良好实践开始) ).

我现在正在编写一个2D游戏,但我认为我的问题适用于任何非平凡的项目.为了简单起见,我将从我的游戏中提供示例.

我有不同种类的僵尸,但它们都有相同的属性(x,y,健康,攻击等)所以我写了一个界面 Zombie,我实现了WalkingZombie,RunningZombie TeleportingZombie等.这是最好的事情吗?我最好用抽象课吗?还是超级?(我不打算部分实现函数 - 因此我选择了一个接口而不是一个抽象类)

我有一个类描述主角(Survivor),因为它非常大,我想用不同的函数编写一个接口,这样我就可以轻松地看到并分享它的结构.这是好习惯吗?还是只是浪费空间和时间?

我希望这个问题不会被评为主观,因为我认为有经验的程序员不会对这种话题产生不同意见,因为接口/超类/抽象类的使用遵循逻辑规则,因此不仅仅是个人选择.

java abstract-class interface superclass

25
推荐指数
1
解决办法
3868
查看次数

抽象类: - 实时例子

最近在一次采访中,我被问到一个非常笼统的问题"java中的抽象是什么".我给出了定义,然后在摘要上引入了一些其他问题,即抽象方法和抽象方法与具体方法之间的区别等.最后,面试官要求给出一个实时的例子,当我应该使用或定义一个类作为抽象时.我感到困惑.我举了一些例子,但他不相信.

我用谷歌搜索,但没有找到真正的解决方案.

那么有人可以给我实时的例子,即当他在他/她的项目中将一个类定义为抽象时,为什么?

谢谢.

java abstract-class class

25
推荐指数
2
解决办法
9万
查看次数

无法使用抽象方法实例化抽象类

我正在研究一种lib,由于一个奇怪的原因,我有这个错误.

  • 是我的代码.当然@ abc.abstractmethod必须取消注释
  • 是我的测试

抱歉,无法复制并粘贴它

我的基础是下面的代码有效

test.py

import abc
import six

@six.add_metaclass(abc.ABCMeta)
class Base(object):

    @abc.abstractmethod
    def whatever(self,):
        raise NotImplementedError

class SubClass(Base):

    def __init__(self,):

        super(Base, self).__init__()
        self.whatever()

    def whatever(self,):
        print("whatever")
Run Code Online (Sandbox Code Playgroud)

在python shell中

>>> from test import *
>>> s = SubClass()
whatever
Run Code Online (Sandbox Code Playgroud)

为什么我的名册模块我有这个错误

Can't instantiate abstract class Player with abstract methods _Base__json_builder, _Base__xml_builder
Run Code Online (Sandbox Code Playgroud)

提前致谢

python abstract-class abc six

25
推荐指数
1
解决办法
3万
查看次数

抽象类是否扩展了Object?

我已经了解了接口和抽象类之间的区别,但这个令人困惑.考虑这个接口和类.

interface I {
    public int hashCode();
    public boolean equals(Object obj);
}

class B implements I {
    // Works Fine
}
Run Code Online (Sandbox Code Playgroud)

这里工作正常,我不需要覆盖接口方法,因为Object是B的超类,并且这些方法在其中实现.

现在考虑这些

abstract class A {
    public abstract int hashCode();
    public abstract boolean equals(Object obj);
}

class C extends A {
    // Compile error because methods are not overridden
}
Run Code Online (Sandbox Code Playgroud)

为什么会导致编译错误?这是否意味着Object不是抽象类的超类?或者我错过了一些观点?

java abstract-class interface

24
推荐指数
2
解决办法
3145
查看次数