我有一个抽象类-let说myBase.我希望从myBase派生的所有类都有一个名为的静态字段
public static List<string> MyPArameterNames
{
get {return _myParameterNames;}
}
Run Code Online (Sandbox Code Playgroud)
因此,每个子类都可以告诉它使用哪些参数名称; 我想要静态,因为我不想为此创建一个实例.
我怎样才能做到这一点?
我有一个抽象的课.我想通过另一个抽象类扩展抽象类,然后实现扩展的抽象类.是否可能.如果是的话,对于OOPS来说,这是否是一个好的方法?
我只是看着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) 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'.
无法将抽象构造函数类型分配给非抽象构造函数类型.
最近我决定看看Java,所以我还是很新的,也是OO编程的方法,所以我想在学习更多东西之前先做一些事情,(我想它永远不会很快从良好实践开始) ).
我现在正在编写一个2D游戏,但我认为我的问题适用于任何非平凡的项目.为了简单起见,我将从我的游戏中提供示例.
我有不同种类的僵尸,但它们都有相同的属性(x,y,健康,攻击等)所以我写了一个界面 Zombie,我实现了WalkingZombie,RunningZombie TeleportingZombie等.这是最好的事情吗?我最好用抽象课吗?还是超级?(我不打算部分实现函数 - 因此我选择了一个接口而不是一个抽象类)
我有一个类描述主角(Survivor),因为它非常大,我想用不同的函数编写一个接口,这样我就可以轻松地看到并分享它的结构.这是好习惯吗?还是只是浪费空间和时间?
我希望这个问题不会被评为主观,因为我认为有经验的程序员不会对这种话题产生不同意见,因为接口/超类/抽象类的使用遵循逻辑规则,因此不仅仅是个人选择.
最近在一次采访中,我被问到一个非常笼统的问题"java中的抽象是什么".我给出了定义,然后在摘要上引入了一些其他问题,即抽象方法和抽象方法与具体方法之间的区别等.最后,面试官要求给出一个实时的例子,当我应该使用或定义一个类作为抽象时.我感到困惑.我举了一些例子,但他不相信.
我用谷歌搜索,但没有找到真正的解决方案.
那么有人可以给我实时的例子,即当他在他/她的项目中将一个类定义为抽象时,为什么?
谢谢.
我正在研究一种lib,由于一个奇怪的原因,我有这个错误.
抱歉,无法复制并粘贴它
我的基础是下面的代码有效
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)
提前致谢
我已经了解了接口和抽象类之间的区别,但这个令人困惑.考虑这个接口和类.
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不是抽象类的超类?或者我错过了一些观点?
abstract-class ×10
java ×5
interface ×4
oop ×2
abc ×1
c# ×1
c++ ×1
class ×1
constructor ×1
hamcrest ×1
inheritance ×1
overriding ×1
php ×1
python ×1
six ×1
static ×1
superclass ×1
typescript ×1