Tag: inheritance

为什么这个多态的C#代码打印它所做的?

最近,我得到了下面这段代码作为帮助理解OOP – C#中的Polymorphism和Inheritance的一种难题。 // No compiling! public class A { public virtual string GetName() { return "A"; } } public class B:A { public override string GetName() { return "B"; } } public class C:B { public new string GetName() { return "C"; } } void Main() { A instance = new C(); Console.WriteLine(instance.GetName()); } […]

为什么是数组对象,但不能用作基类?

Java语言规范指定 在Java编程语言中,数组是对象(第4.3.1节),是dynamic创build的,可以分配给Objecttypes的variables(第4.3.2节)。 类Object所有方法都可以在数组上调用。 所以,考虑到数组是对象 – 为什么Javadevise者决定不允许从它inheritance和重写,例如toString()或equals() ? 目前的语法不允许创build一个数组作为基类的匿名类,但我不认为这是他们的决定的原因。

什么是静态方法inheritance的正确select?

我明白静态方法inheritance不支持在C#中。 我还读了一些讨论(包括这里),其中开发人员声称需要这个function,典型的回应是“如果你需要静态成员inheritance,你的devise存在缺陷”。 好吧,鉴于面向对象不希望我想到静态inheritance,我必须得出结论,我明显需要它指向我的devise中的一个错误。 但是,我卡住了。 我真的很感谢一些帮助解决这个问题。 这是挑战 我想创build一个抽象的基类(我们称之为Fruit),它封装了一些复杂的初始化代码。 这段代码不能放在构造函数中,因为它的一部分依赖于虚方法调用。 Fruit将被其他具体类(Apple,Orange)inheritance,每个类都必须公开一个标准工厂方法CreateInstance()来创build和初始化一个实例。 如果静态成员inheritance是可行的,我会将工厂方法放在基类中,并使用虚拟方法调用派生类来获取具体实例必须初始化的types。 客户端代码将简单调用Apple.CreateInstance()来获取完全初始化的Apple实例。 但显然这是不可能的,所以有人可以解释我的devise需要改变以适应相同的function。

Java:调用一个调用重载方法的超级方法

public class SuperClass { public void method1() { System.out.println("superclass method1"); this.method2(); } public void method2() { System.out.println("superclass method2"); } } public class SubClass extends SuperClass { @Override public void method1() { System.out.println("subclass method1"); super.method1(); } @Override public void method2() { System.out.println("subclass method2"); } } public class Demo { public static void main(String[] args) { SubClass […]

是否所有的虚函数都需要在派生类中实现?

这可能看起来像一个简单的问题,但我无法在其他地方find答案。 假设我有以下几点: class Abstract { public: virtual void foo() = 0; virtual void bar(); } class Derived : Abstract { public: virtual void foo(); } Derived类不能实现bar()函数吗? 如果不是我所有的派生类都需要bar()函数,但是有一些呢。 所有的抽象基类的虚函数都需要在派生类中实现,还是仅仅是纯虚拟的? 谢谢

将基类转换为派生类

在C#中是否有可能将基类对象显式转换为其派生类之一? 目前认为我必须为我的派生类创build一个构造函数,接受基类对象作为参数并复制属性值。 我不太喜欢这个想法,所以如果可能的话,我想避免它。 这似乎不应该工作(对象被实例化为新的基地,所以内存不应该分配给派生类的额外成员),但C#似乎让我这样做: class BaseClass { … some stuff … } class DerivedClass : BaseClass { public bool MyDerivedProperty{ get; set; } } static void Main(string[] args) { BaseClass myBaseObject = new BaseClass(); DerivedClass myDerivedObject = myBaseObject as DerivedClass; myDerivedObject.MyDerivedProperty = true; }

在Backbone中访问父类

我需要从inheritance的MyModel类中调用父类的initialize方法,而不是像我今天所做的那样完全覆盖它。 我怎么能这样做? 以下是我的代码现在看起来: BaseModel = Backbone.Model.extend({ initialize: function(attributes, options) { // Do parent stuff stuff } }); MyModel = BaseModel.extend({ initialize: function() { // Invoke BaseModel.initialize(); // Continue doing specific stuff for this child-class. }, });

哪些类不能被分类?

是否有任何内置和标准库类不可分类(“最终”)的规则? 从Python 3.3开始,下面是一些例子: bool function operator.itemgetter slice 我发现了一个问题 ,用C和纯Python来处理“final”类的实现。 我想了解为什么一个class级被选为“最终”的原因可能是什么原因。

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

我想知道什么时候应该使用接口。 让我们思考以下几点: public abstract class Vehicle { abstract float getSpeed(); } 和: public interface IVehicle { float getSpeed(); } 我可以很容易地实现他们两个,他们有相同的function…但我也可以添加一些variables,我的车辆类,这可能应该用在车辆(maxSpeed,carType …) 什么是使用接口的原因? 谢谢! 编辑:我发现了另一个线程中的一个不错的链接: http : //www.thecoldsun.com/en/content/01-2009/abstract-classes-and-interfaces

定义一个没有任何抽象方法的抽象类

我可以在不添加抽象方法的情况下定义抽象类吗?