Tag: inheritance

JavaScript中的原型OO

TL; DR: 我们是否需要原型OO中的工厂/构造器? 我们可以做一个范例转换并完全放弃它们吗? BackStory: 我最近一直在做JavaScript中的原型OO,并发现在JavaScript中执行的面向对象的99%迫使经典的OO模式。 我认为原型OO是两件事。 方法的静态原型(和静态数据)和数据绑定。 我们不需要工厂或build设者。 在JavaScript中,这些是包含函数和Object.create Object文字。 这意味着我们可以将所有东西都build模为一个静态的蓝图/原型和一个数据绑定抽象,这个抽象最好直接插入到文档样式的数据库中。 即从数据库中取出对象,并通过数据克隆原型来创build对象。 这将意味着没有构造逻辑,没有工厂,没有new 。 示例代码: 一个伪示例是: var Entity = Object.create(EventEmitter, { addComponent: { value: function _addComponent(component) { if (this[component.type] !== undefined) { this.removeComponent(this[component.type]); } _.each(_.functions(component), (function _bind(f) { component[f] = component[f].bind(this); }).bind(this)); component.bindEvents(); Object.defineProperty(this, component.type, { value: component, configurable: true }); this.emit("component:add", this, component); […]

Java中的默认构造函数

我知道我在这里问一些严重的问题 我有一些Foo类和一个扩展Foo的类Bar 。 在Foo我有一个构造函数,它将一组参数设置为其字段。 导出Bar等类通常不需要修改。 现在我的IDE给我“Foo中没有默认的构造函数” 。 从一点谷歌search这似乎是因为“构造函数不被inheritance”。 所以一切都很好,但是我怎样才能在不重复每个派生类中的构造函数的情况下工作? 我假设有一个更理智的方法?

SQLAlchemyinheritance

我对sqlalchemy下的inheritance有点困惑,我甚至不知道我应该在这里使用什么types的inheritance(单表,连接表,具体)。 我有一个基类,其中包含一些在子类中共享的信息,以及一些完全独立的数据。 有时候,我会需要所有类的数据,有时只需要来自子类的数据。 这是一个例子: class Building: def __init__(self, x, y): self.x = x self.y = y class Commercial(Building): def __init__(self, x, y, business): Building.__init__(self, x, y) self.business = business class Residential(Building): def __init__(self, x, y, numResidents): Building.__init__(self, x, y, layer) self.numResidents = numResidents 我将如何使用声明将其转换为SQLAlchemy? 那么,我将如何查询哪些build筑物在x>5和y>3 ? 或者哪个住宅楼只有一个居民?

在C#中,你需要调用基础构造函数吗?

在C#中,如果我有一个默认的构造函数的inheritance类,我必须显式调用基类的构造函数或将隐式调用? class BaseClass { public BaseClass() { // … some code } } class MyClass : BaseClass { public MyClass() // Do I need to put ": base()" here or is it implied? { // … some code } }

Rails:activeadmin重写创build操作

我有一个active_admin资源,它有一个belongs_to:用户关系。 当我在活动pipe理员中创build模型的新实例时,我想将当前login的用户作为创build实例的用户(非常标准的东西,我想象)。 所以…我得到了它的工作: controller do def create @item = Item.new(params[:item]) @item.user = current_curator super end end 然而;)我只是想知道这是如何工作? 我只是希望分配@itemvariables的用户,然后调用超级将工作(和它)。 我也开始浏览gem,但看不到它是如何工作的。 任何指针都会很棒。 我假设这是inheritance资源给你的东西? 谢谢!

在实例化之后是否可以更改C ++对象的类?

我有一堆类都从一个共同的基类inheritance相同的属性。 基类实现了一些在一般情况下工作的虚拟函数,而每个子类重新实现了各种特殊情况下的虚拟函数。 情况如下:我希望这些分类对象的特殊性是可以消耗的。 本质上,我想要实现一个expend()函数,这个函数会导致一个对象失去它的子类标识,然后恢复成基类实例,并且在基类中实现一般的行为。 我应该注意到派生类不会引入任何额外的variables,所以基类和派生类在内存中应该是相同的大小。 我打算销毁旧的对象,并创build一个新的,只要我可以在同一个内存地址创build新的对象,所以现有的指针不会被打破。 以下尝试不起作用,并产生一些看似意外的行为。 我在这里错过了什么? #include <iostream> class Base { public: virtual void whoami() { std::cout << "I am Base\n"; } }; class Derived : public Base { public: void whoami() { std::cout << "I am Derived\n"; } }; Base* object; int main() { object = new Derived; //assign a new Derived […]

虚拟inheritance

什么是“虚拟”inheritance的含义? 我看到下面的代码,并且在下面的上下文中不理解关键字virtual的含义: class A {}; class B : public virtual A;

在Swift中覆盖存储的属性

我注意到编译器不会让我用另一个存储的值覆盖存储的属性(这看起来很奇怪): class Jedi { var lightSaberColor = "Blue" } class Sith: Jedi { override var lightSaberColor = "Red" // Cannot override with a stored property lightSaberColor } 但是,我可以用一个计算的属性来做到这一点: class Jedi { let lightSaberColor = "Blue" } class Sith: Jedi { override var lightSaberColor : String{return "Red"} } 为什么我不能给它另一个价值? 为什么用存储的财产压倒一个可憎的事物,并用计算出来的一个犹太人来做呢? 他们在想什么?

C#相当于Java的<? 在generics中扩展Base>

在Java中,我可以做到以下几点:(假设Subclass extends Base ): ArrayList<? extends Base> aList = new ArrayList<Subclass>(); C#.NET中的等价物是什么? 没有? extends 显然? extends关键字,这是行不通的: List<Base> aList = new List<Subclass>();

一个接口应该inheritance另一个接口

我似乎无法find答案,只是想确保这是一个好的编码标准。 我有接口A被许多不同的类使用,不希望接口A改变。 我遇到了一个新的需求,需要实现接口A的许多类需要枚举,但并不是所有的类都需要这个枚举。 我不希望那些不需要这个新枚举的类来实现这个新的function。 所以我创build了接口B,其中包含我需要添加的新枚举。 然后我做了接口Binheritance接口A,这是我的关注,一个接口inheritance另一个接口可以吗? 为了继续我的更改,我将需要新枚举的类更改为实现接口B而不是接口A,因为它是由接口Binheritance的。我想在我的类中实现两个接口,但需要它们,但是我使用在整个代码的接口,并希望只使用一个接口来查看类而不是两个。 我希望这已经足够清楚了(可能会很长),但如果任何人都可以给我一些build议,无论我做对了还是我做错了,请让我知道。 谢谢!