我试图创build一个抽象类,定义一个属性与getter。 我想把它留给派生类来决定是否要为这个属性实现一个setter。 这可能吗? 我到目前为止: public abstract class AbstractClass { public abstract string Value { get; } public void DoSomething() { Console.WriteLine(Value); } } public class ConcreteClass1 : AbstractClass { public override string Value { get; set; } } public class ConcreteClass2 : AbstractClass { private string _value; public override string Value { get { return […]
我正在开发一个项目,目前正在使用log4j来实现一些日志logging,我对如何执行日志感到好奇。 我踢的两个实现如下: 第一select 使用超类的单个日志来处理该类和所有子类: public abstract class AbstractFoo { protected static Log LOG = LogFactory.getLog(AbstractFoo.class); … } public class Foo extends AbstractFoo { public void someMethod() { LOG.info("Using abstract log"); } } 第二个选项 为每个class级使用单独的日志,super和subs: public abstract class AbstractFoo { private static Log LOG = LogFactory.getLog(AbstractFoo.class); … } public class Foo extends AbstractFoo { private static […]
如果我想使类具有适应性,并且可以从外部select不同的algorithm – 在C ++中最好的实现是什么? 我主要看到两种可能性: 使用抽象基类并传入具体对象 使用模板 这里有一个小例子,在各个版本中实现: 版本1:抽象基类 class Brake { public: virtual void stopCar() = 0; }; class BrakeWithABS : public Brake { public: void stopCar() { … } }; class Car { Brake* _brake; public: Car(Brake* brake) : _brake(brake) { brake->stopCar(); } }; 版本2a:模板 template<class Brake> class Car { Brake brake; public: […]
假设在一个接口中有两个方法M1()和M2() 。 一个抽象类也有两个相同的抽象方法。 如果任何类实现了这个接口或从抽象类inheritance,它将不得不实现其中的两个方法。 所以对我来说,接口或抽象类对于我的场景来说似乎是相同的。 那么,有没有人可以在这个特定的情况下突出这两者之间的差异,并build议在这里使用抽象类还是接口?
在下面的代码中,我创build了一个基本的抽象类Base 。 我想要从Baseinheritance的所有类提供name属性,所以我使这个属性成为@abstractmethod 。 然后我创build了一个名为Base_1的Base类的子类,它提供了一些function,但仍然是抽象的。 在Base_1没有name属性,但是python会在Base_1创build一个没有错误的对象。 如何创build抽象属性? from abc import ABCMeta, abstractmethod class Base(object): __metaclass__ = ABCMeta def __init__(self, strDirConfig): self.strDirConfig = strDirConfig @abstractmethod def _doStuff(self, signals): pass @property @abstractmethod def name(self): #this property will be supplied by the inheriting classes #individually pass class Base_1(Base): __metaclass__ = ABCMeta # this class does not provide the […]
假设KeyAdapter是一个抽象类,有几个可以被覆盖的方法。 在Java中我可以这样做: KeyListener keyListener = new KeyAdapter() { @Override public void keyPressed(KeyEvent keyEvent) { // … } }; 如何在Kotlin中做同样的事情?
我有问题得到一个代码块正确运行。 我不完全确定这个代码是做什么的(我试图得到一个插件已经过时,可以正常使用我们的服务器),我只知道它每运行20分钟就会抛出一个错误。 以下是发生问题的部分代码: public class DynamicThread extends Thread { private LocalShops plugin = null; public DynamicThread(ThreadGroup tgroup, String tname, LocalShops plugin) { super(tgroup, tname); this.plugin = plugin; } public void run() { Map<ItemInfo, List<Integer>> itemStockMap = Collections.synchronizedMap(new HashMap<ItemInfo, List<Integer>>()); //Dump all the shop stock data into the map. for ( Shop shop : plugin.getShopManager().getAllShops() ) […]
我有一个自定义属性,我想要应用到我的基本抽象类,以便我可以跳过HTML中显示项目时用户不需要查看的元素。 看来覆盖基类的属性不会inheritance属性。 重写基本属性(抽象还是虚拟)会吹走放置在原始属性上的属性? 从属性类定义 [AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)] public class NoHtmlOutput : Attribute { } 从抽象类定义 [NoHtmlOutput] public abstract Guid UniqueID { get; set; } 从具体类的定义看 public override Guid UniqueID{ get{ return MasterId;} set{MasterId = value;}} 从类检查属性 Type t = o.GetType(); foreach (PropertyInfo pi in t.GetProperties()) { if (pi.GetCustomAttributes(typeof(NoHtmlOutput), true).Length == 1) […]
在Python 2.x中,当你想把一个方法标记为抽象的,你可以像这样定义它: class Base: def foo(self): raise NotImplementedError("Subclasses should implement this!") 那么如果你忘记重写它,你会得到一个很好的提醒exception。 有没有一种等同的方式来标记一个领域是抽象的? 或者在class级文档中说明所有你能做的事情? 起初我以为我可以把这个字段设置为NotImplemented,但是当我查找它的实际内容(比较富有)时,它似乎是一种滥用。
我有一个常见的程序集/项目有一个抽象的基类,然后我想公开其他程序集的几个派生类。 我不想让抽象基类在Intellisense中的其他程序集中出现,所以我想我会把它放在internal ,但是我得到这个错误: 不一致的可访问性:基类“设置”比类“IrcSettings”更难以访问…. 我真的不明白这一点。 我不得不使抽象的Settings类public ,因此在这个程序集之外是可见的。 我怎样才能让这个classinternal呢?