标签: abstract-class

AS3 - 抽象类

我怎样才能很好地在AS3中创建一个抽象类?

我试过这个:

public class AnAbstractClass
{
    public function toBeImplemented():void
    {
        throw new NotImplementedError(); // I've created this error
    }
}

public class AnConcreteClass extends AnAbstractClass
{
    override public function toBeImplemented():void
    {
        // implementation...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是......我不喜欢这样.并且没有编译时错误.

oop abstract-class actionscript-3

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

PHP中特征与抽象类的区别

我最近在PHP中遇到了Traits,我正试图理解它们.在我的研究期间,我偶然发现了Stack Overflow这个问题:Traits vs. Interfaces.接受的答案提到以下内容:

接口定义了实现类必须实现的一组方法.

当使用特征时,方法的实现也会出现 - 这在接口中不会发生.

到目前为止这么好,但这听起来就像接口和抽象类之间的区别.所以这为我提出了一个后续问题:

  • PHP中的Trait和Abstract Class有什么区别?

我知道我只能从一个抽象类扩展,另一方面可以使用任何数量的特征.但这真的是唯一的区别吗?我仍然不完全了解特征及其用途.

php abstract-class traits

30
推荐指数
2
解决办法
8418
查看次数

接口+扩展(mixin)与基类

接口+扩展方法(mixin)是否优于抽象类?

如果你的答案是"它取决于",它依赖于什么?

我看到接口+扩展方法有两个可能的优点.

  • 接口是多重可继承的,而类则不是.
  • 您可以使用扩展方法以不间断的方式扩展接口.(实现您的界面的客户端将获得新的基本实现,但仍然可以覆盖它.)

我还没有想到这种方法的缺点.接口+扩展方法失败可能有一个明显的简单原因.

关于这个主题的两篇有用的文章是

.net extension-methods abstract-class interface

29
推荐指数
2
解决办法
3690
查看次数

什么是公共构造函数在C#中的抽象类中的实用性?

如果抽象类中的公共构造函数只能由其派生类调用,那么它应该在功能上等同于受保护的构造函数.对?

在抽象类中声明公共构造函数而不是受保护构造函数有什么区别吗?你会用它做什么用的?为什么编译器没有投诉?

c# constructor abstract-class

29
推荐指数
1
解决办法
3457
查看次数

C#中的抽象显式接口实现

我有这个C#代码:

abstract class MyList : IEnumerable<T>
{
    public abstract IEnumerator<T> GetEnumerator();

    //abstract IEnumerator IEnumerable.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

就是这样,我得到:

'Type'没有实现接口成员'System.Collections.IEnumerable.GetEnumerator()'.

删除评论,我得到:

修饰符'abstract'对此项无效

如何制作显式实现摘要

c# abstract-class interface

28
推荐指数
2
解决办法
7121
查看次数

何时使用抽象类或接口?

为什么要创建抽象类或接口类,或者何时应该使用抽象类或接口类?

java abstract-class interface

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

确定Python类是抽象基类还是混凝土

我的Python应用程序包含许多抽象类和实现.例如:

import abc
import datetime

class MessageDisplay(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractproperty
    def display(self, message):
        pass

class FriendlyMessageDisplay(MessageDisplay):
    def greet(self):
        hour = datetime.datetime.now().timetuple().tm_hour

        if hour < 7:
            raise Exception("Cannot greet while asleep.")
        elif hour < 12:
            self.display("Good morning!")
        elif hour < 18:
            self.display("Good afternoon!")
        elif hour < 20:
            self.display("Good evening!")
        else:
            self.display("Good night.")

class FriendlyMessagePrinter(FriendlyMessageDisplay):
    def display(self, message):
        print(message)
Run Code Online (Sandbox Code Playgroud)

FriendlyMessagePrinter 是一个我们可以使用的具体类......

FriendlyMessagePrinter().greet()
Run Code Online (Sandbox Code Playgroud)
Good night.
Run Code Online (Sandbox Code Playgroud)

...但是MessageDisplay并且FriendlyMessageDisplay是抽象类并且尝试实例化一个会导致错误:

TypeError: Can't instantiate abstract class MessageDisplay with abstract methods say
Run Code Online (Sandbox Code Playgroud)

如何检查给定的类对象是否是(不可实例化的)抽象类?

python abstract-class abc

28
推荐指数
2
解决办法
7037
查看次数

Java 8:虚拟扩展方法与抽象类

我正在研究Java 8接口中的新虚拟扩展方法:

public interface MyInterface {
   default String myMethod() { 
      return "myImplementation"; 
   }
}
Run Code Online (Sandbox Code Playgroud)

我的目的是允许接口随着时间的推移而发展,以及多重继承位,但它们看起来非常像我的抽象类.

如果你正在做新的工作,抽象类优先于扩展方法来提供"接口"的实现,还是这两种方法在概念上是等价的?

java abstract-class interface java-8

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

Python:抽象类__init__

我试图A用一个默认行为的构造函数声明一个抽象类:所有子类必须初始化一个成员self.n:

from abc import ABCMeta

class A(object):
    __metaclass__ = ABCMeta

    def __init__(self, n):
        self.n = n
Run Code Online (Sandbox Code Playgroud)

但是,我不想让A类被实例化,因为它是一个抽象类.问题是,这实际上是允许的:

a = A(3)
Run Code Online (Sandbox Code Playgroud)

当我期望它应该时,这不会产生任何错误.

那么:如何在为构造函数定义默认行为时定义不可实例化的抽象类?

python oop abstract-class python-2.7

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

Virtual Base类析构函数的"未定义引用"

可能重复:
什么是未定义的引用/未解析的外部符号错误,如何解决?

我有一些Java经验,现在正在做C++课程.我想尝试编写一个界面,但是我遇到了一些我无法解决的析构函数问题,即使是在Internet上的帮助......这是我的代码:

    class Force {

    public:

    virtual ~Force();
    virtual VECTOR eval(VECTOR x, double t);

};

class InvSquare : public Force {

    public:

    InvSquare(double A) {

        c = A;

    }

    ~InvSquare(){};

    VECTOR eval(VECTOR x, double t) { // omitted stuff }

    private:
    double c;

};
Run Code Online (Sandbox Code Playgroud)

我试图为基类声明一个虚拟析构函数,并为派生类声明一个非虚函数,但是我得到一个错误,说"未定义引用`Force :: ~Force()'".它是什么意思,我该如何解决?

如果这是一个愚蠢的问题,请原谅我!

非常感谢你的帮助,noctilux

c++ abstract-class undefined-reference

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