有没有什么办法可以在PHP中定义抽象类属性? abstract class Foo_Abstract { abstract public $tablename; } class Foo extends Foo_Abstract { //Foo must 'implement' $property public $tablename = 'users'; }
我想知道是什么让程序员selectPimpl成语或纯虚拟类和inheritance。 我明白,pimpl习语为每个公共方法和对象创build开销带来了一个明确的额外间接。 纯虚拟类在另一方面带有隐式间接(vtable)的inheritance实现,我明白,没有对象创build开销。 编辑 :但是你会需要一个工厂,如果你从外面创build对象 是什么使得纯粹的虚拟阶级比俚语成语更不可取?
我在C#中的testing代码: namespace DSnA { public abstract class Test : IComparable { } } 导致以下编译器错误: error CS0535: 'DSnA.Test' does not implement interface member 'System.IComparable.CompareTo(object)' 由于类Test是一个抽象类 ,为什么编译器要求它实现接口? 这个要求不应该只针对具体的课程吗?
如何用PHPUnittesting抽象类的具体方法? 我希望我不得不创build某种对象作为testing的一部分。 虽然,我不知道这个最好的做法,或者如果PHPUnit允许这样做。
可能重复: Java:Object类的基本原理不被声明为抽象的 为什么Object类是Java的基础类,而不是抽象的? 这个问题我真的有很长的一段时间,纯粹是出于好奇而被问到,就是这样。 我的代码或者任何人的代码都没有破坏,因为它不是抽象的,但是我想知道为什么他们把它变成具体的? 为什么会有人想要这个对象类的“实例”(而不是它的存在和参考)? 一种情况是一个糟糕的同步代码,它使用一个对象的实例进行locking(至less我这样用了一次..我的坏)。 对象类的“实例”有没有实际的用法? 它的实例如何适合OOP? 如果将它标记为抽象(当然在为其方法提供实现之后)会发生什么?
我们总是声明一个纯虚函数: virtual void fun () = 0 ; 即,它总是分配给0。 我的理解是,这是初始化这个函数的Vtable条目为NULL和任何其他值在这里导致编译时错误。 这种理解是否正确?
为什么可以在C#中为抽象类编写构造函数? 据我所知,我们不能实例化一个抽象类。所以它是什么? 你不能实例化这个类,对吧?
请解释什么时候应该使用接口,什么时候应该使用抽象类? 我怎样才能改变我的抽象类到一个接口?
Python中的抽象类和接口有什么区别?
虽然某些指导方针声明,当您想要为inheritance不清楚的类定义合同( IDomesticated ),并且在类是另一个类的扩展时( Cat : Mammal , Snake : Reptile )的inheritance,您应该使用接口。 (在我看来)这些指导方针进入灰色地带的情况。 例如,说我的实施是Cat : Pet 。 Pet是一个抽象的类。 是否应该扩展到Cat : Mammal, IDomesticated Mammal是抽象类和IDomesticated是一个接口? 还是我和KISS / YAGNI的原则相冲突(即使我不确定将来会不会有一个Wolf阶级,而这个阶级是不能从Petinheritance的)? 摆脱隐喻的Cat和Pet ,让我们说我有一些代表传入数据来源的类。 他们都需要以某种方式实施相同的基地。 我可以在一个抽象的Source类中实现一些通用的代码,并inheritance它。 我也可以创build一个ISource接口(对我来说感觉更“正确”),并在每个类中重新实现generics代码(这不太直观)。 最后,我可以通过制作抽象类和接口来“吃蛋糕”。 什么是最好的? 这两种情况提出只使用抽象类,只使用一个接口,同时使用抽象类和接口。 这些都是有效的select,还是有什么“规则”,什么时候应该用于另一个? 我想澄清的是,通过“同时使用抽象类和接口”来包含它们本质上代表相同事物( Source和ISource都具有相同成员)的情况,但是该类在接口指定时添加了一般function合同。 另外值得注意的是,这个问题主要针对不支持多inheritance的语言(如.NET和Java)。