标签: abstract-class

什么是PHP中的抽象类?

什么是PHP中的抽象类?哪里可以使用?

php oop abstract-class

110
推荐指数
5
解决办法
10万
查看次数

抽象类的命名约定

我清楚地记得,有一次,微软推动的指导原则是将"Base"后缀添加到抽象类中,以避免它是抽象的事实.因此,我们有类,如System.Web.Hosting.VirtualFileBase,System.Configuration.ConfigurationValidatorBase,System.Windows.Forms.ButtonBase,,当然,System.Collections.CollectionBase.

但是我注意到,最近,框架中的许多抽象类似乎都没有遵循这个约定.例如,以下类都是抽象的,但不遵循此约定:

  • System.DirectoryServices.ActiveDirectory.DirectoryServer

  • System.Configuration.ConfigurationElement

  • System.Drawing.Brush

  • System.Windows.Forms.CommonDialog

这就是我几秒钟内就可以鼓起来的东西.所以我去查看官方文档说的内容,以确保我没有疯狂.我在开发类库的设计指南中找到了MSDN上的类,结构和接口名称.奇怪的是,我没有提到在抽象类名称的末尾添加"Base"的指南.该框架的1.1版已不再适用该指南.

那么,我输了吗?该指南是否存在?是不是一言不发就被遗弃了?在过去的两年里,我一直在为自己创造长篇名字吗?

有人在这里给我一个骨头.

更新 我不是疯了.该指南已存在.Krzysztof Cwalina在2005年抱怨它.

.net abstract-class naming-conventions

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

如何在Kotlin中创建一个抽象类的匿名类实例?

假设这KeyAdapter是一个抽象类,有几个可以覆盖的方法.

在java中我可以做到:

KeyListener keyListener = new KeyAdapter() {
    @Override public void keyPressed(KeyEvent keyEvent) {
        // ...
    }
};
Run Code Online (Sandbox Code Playgroud)

如何在Kotlin做同样的事情?

java abstract-class kotlin

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

C++中的抽象类与接口

可能重复:
如何在C++中声明接口?

这是关于C++的一般问题.如你所知,目前还没有明确的区分之间interface以及abstract class在C++与Java和C#.什么时候更喜欢用C++ interface代替abstract class?你能举一些例子吗?

c++ abstract-class interface

92
推荐指数
4
解决办法
18万
查看次数

抽象类与特质的区别

可能重复:
Scala特征与抽象类

抽象类和特征之间的概念差异是什么?

abstract-class scala traits

91
推荐指数
4
解决办法
5万
查看次数

`staticmethod`和`abc.abstractmethod`:它会融合吗?

在我的Python应用程序中,我想创建一个既是a staticmethod又是a的方法abc.abstractmethod.我该怎么做呢?

我尝试应用两个装饰器,但它不起作用.如果我这样做:

import abc

class C(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractmethod
    @staticmethod    
    def my_function(): pass
Run Code Online (Sandbox Code Playgroud)

我得到一个异常*,如果我这样做:

class C(object):
    __metaclass__ = abc.ABCMeta

    @staticmethod    
    @abc.abstractmethod
    def my_function(): pass
Run Code Online (Sandbox Code Playgroud)

不强制执行抽象方法.

如何制作抽象静态方法?

*例外:

File "c:\Python26\Lib\abc.py", line 29, in abstractmethod
 funcobj.__isabstractmethod__ = True
AttributeError: 'staticmethod' object has no attribute '__isabstractmethod__'
Run Code Online (Sandbox Code Playgroud)

python abstract-class static-methods

86
推荐指数
4
解决办法
2万
查看次数

我何时必须使用接口而不是抽象类?

我想知道什么时候应该使用接口.

让我们考虑以下事项:

public abstract class Vehicle {
   abstract float getSpeed();
}
Run Code Online (Sandbox Code Playgroud)

并且:

public interface IVehicle {
  float getSpeed();
}
Run Code Online (Sandbox Code Playgroud)

我可以很容易地实现它们,它们具有相同的功能......但是我也可以在我的车辆类中添加一些变量,这些变量可能应该用在车辆中(maxSpeed,carType ......)

使用接口的原因是什么?

谢谢!

编辑:我在另一个帖子中找到了一个很好的链接:http://www.thecoldsun.com/en/content/01-2009/abstract-classes-and-interfaces

java oop inheritance abstract-class interface

85
推荐指数
6
解决办法
16万
查看次数

如何使用JUnit在Java中测试抽象类?

我是JUnit的Java测试新手.我必须使用Java,我想使用单元测试.

我的问题是:我有一个带有一些抽象方法的抽象类.但是有些方法并不是抽象的.如何使用JUnit测试此类?示例代码(非常简单):

abstract class Car {

    public Car(int speed, int fuel) {
        this.speed = speed;
        this.fuel = fuel;
    }

    private int speed;
    private int fuel;

    abstract void drive();

    public int getSpeed() {
        return this.speed;
    }

    public int getFuel() {
        return this.fuel;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想测试getSpeed()getFuel()功能.

这个问题的类似问题在这里,但它没有使用JUnit.

在JUnit FAQ部分中,我找到了这个链接,但我不明白作者想用这个例子说些什么.这行代码是什么意思?

public abstract Source getSource() ;
Run Code Online (Sandbox Code Playgroud)

java junit abstract-class

82
推荐指数
6
解决办法
9万
查看次数

如何在python抽象类中创建抽象属性

在下面的代码中,我创建了一个基本抽象类Base.我希望所有继承的类都Base提供name属性,所以我创建了这个属性@abstractmethod.

然后我创建了一个Base名为的子类Base_1,它旨在提供一些功能,但仍然是抽象的.没有name属性Base_1,但是python会在没有错误的情况下实现该类的对象.如何创建抽象属性?

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 name property, should raise an error
    def __init__(self, strDirConfig):
        super(Base_1, self).__init__(strDirConfig)

    def _doStuff(self, signals): …
Run Code Online (Sandbox Code Playgroud)

python abstract-class properties decorator

81
推荐指数
6
解决办法
5万
查看次数

Java中的抽象类与接口

我被问到一个问题,我想在这里查看我的答案.

问:在哪种情况下扩展抽象类而不是实现接口更合适?

答:如果我们使用模板方法设计模式.

我对么 ?

如果我无法清楚地陈述问题,我很抱歉.
我知道抽象类和接口之间的基本区别.

1)当需求需要在特定操作的每个子类中实现相同的功能(实现方法)和其他一些操作的不同功能(仅方法签名)时,使用抽象类

2)如果需要将签名设置为相同(并且实现不同),请使用接口,以便您可以遵守接口实现

3)我们可以扩展一个抽象类的最大值,但可以实现多个接口

重申一个问题:除了上面提到的那些之外,还有其他任何场景,具体我们需要使用抽象类(一个是模板方法设计模式在概念上仅基于此)吗?

接口与抽象类

在这两者之间做出选择真的取决于你想做什么,但幸运的是,对我们来说,Erich Gamma可以帮助我们一点.

一如既往地存在权衡,接口为您提供基类的自由,抽象类使您可以自由地在以后添加新方法. - Erich Gamma

无法在不改变代码中的许多其他东西的情况下更改接口,因此避免这种情况的唯一方法是创建一个全新的接口,这可能并不总是一件好事.

Abstract classes应主要用于密切相关的对象.Interfaces更好地为不相关的类提供通用功能.

java abstract-class design-patterns interface

79
推荐指数
7
解决办法
8万
查看次数