![]() |
1
2
简单:当您不知道或不关心它是超级类还是子类时,那么您更喜欢超级类变量声明。 正如您所指出的:由于多态性,方法调用依赖于对象的实际类型,而不是您用来访问它的变量的声明。这是面向对象编程的核心属性之一。 当您打算调用 只有 存在于子类中。如果没有为父类定义方法,则不能对该方法进行调用! |
![]() |
2
1
这取决于
你想表达什么
. 应该
下面是一个类似的模式,它经常出现:
如果我知道我特别需要一个
对于第二个模式,您表示您真正需要的只是
另外,对于公开到公共空间的接口方法,您应该使它们尽可能通用(首选父类或接口而不是子类),但是对于实现或内部内容,使用特定的具体类是完全合适的。
假设你真的想要
|
![]() |
3
0
这在多态性中被称为向上铸造。 用例: 假设我有三类水果,橘子和苹果
现在,如果我想要一个方法,取一个橘子并打印它的名称,我将把它写为
但是,如果我想让这个印刷品印上任何水果的名字,而不仅仅是桔子的名字呢? 现在我们将改变如下的方法
现在,任何水果的名称都将以printfootname打印。通过说
|
![]() |
4
0
以上两个答案回答了你的问题,但我想进一步扩展。 使用父类变量(fruit o)允许我们在运行时传递子类对象并实现多态性。例如,考虑以下课程
如果不允许父引用引用子对象,请设想ShoppingCart类的编码。
对于每个水果,我们需要单独的代码来处理。因此,它也提高了代码的可维护性和可读性。 类似地,可以考虑在Fruit和Orange类中添加名为getPrice()的方法。你会意识到它在购物车课程中的重要性。 |
![]() |
Fernando Chu · 一个变量有多个可能的类?[关闭] 7 月前 |
![]() |
Amaterastis · 基类接受子类和内部子类的模板参数 8 月前 |
![]() |
Rishab Negi · 这个关键字在抽象类中是如何工作的 9 月前 |
![]() |
dEmigOd · 类层次结构中的运算符重载解析 9 月前 |
![]() |
TableTopRug · 如何从Kotlin中的密封类继承? 9 月前 |
![]() |
hasdrubal · 抽象基类函数指针python 1 年前 |
|
Josh · 通过反思访问孩子的财产 1 年前 |