自从我对 Java OOP 做任何事情以来已经有一段时间了,所以我有点生疏,想要澄清一下。
在 Java 中,如果我没记错的话,可以声明一个超类并实例化一个子类;例如,Superclass myObject = new Subclass()
。
然后可以将 myObject 传递给接受超类参数的函数,并使用引用访问任何超类属性/方法。
这就是事情变得模糊的地方 - 如果您想访问特定于子类的方法/变量,您可以直接使用 myObject (它被声明为超类)执行此操作,还是需要先将其转换为子类类型?
如果我们现在将其转至 C#,是否适用相同的逻辑?我在尝试复制这种行为时遇到了一些奇怪的问题。我正在查看的具体用例是:
//These are just declarations for ease-of-reading
Superclass bar = new Subclass();
public static void doSomething(Superclass foo) {...}
//Logic
doSomething(bar);
bar.superOnly() //Should this work?
bar.subOnly() //Should this work?
bar.subOverrided() //Will this call the superclass or subclass version?
我也在教程中查找这些内容,但大多数示例似乎都是简单的“Subclass myObject = new Subclass()”实例,输出微不足道。到目前为止,我发现的任何内容都没有涵盖函数参数的模糊世界。
如果有人可以帮助我,或者将我指向涵盖 C# 中的函数参数和 OO 的特定资源,我将不胜感激!