当前位置: 首页 > 面试题库 >

将子类对象分配给Superclass实例类型仅是为了覆盖概念?还是我们还要这样做?

翟修永
2023-03-14
问题内容

您是否仅将子类对象分配给超类实例类型?还是我们还要这样做?

示例:Sub是Super的子类型, Super s = new Sub();

请解释。


问题答案:

当某人这样编写代码时,他/她正在尝试遵循基本的OO设计原则,即-

编写接口程序,而不是具体实现

我已经在我的一篇博客文章中解释了这一原理。在该Class Inheritance VS Interface Inheritance部分中查找。

总而言之,当您使用父类型的引用来引用子类型的实例时,您将获得很大的灵活性。例如,如果将来需要更改子类型的实现,则无需更改太多代码即可轻松实现。

考虑以下方法-

public void DoSomeStuff(Super s) {
    s.someMethod();
}

调用此方法-

DoSomeStuff(new Sub());

现在,如果您需要更改内部逻辑someMethod,则可以通过声明的新子类型(Super例如NewSubType)并更改该实现内部的逻辑来轻松实现。这样,您将无需接触使用该方法的其他现有代码。您仍然可以DoSomeStuff通过以下方式使用您的方法-

DoSomeStuff(new NewSubType());

如果您声明的参数为DoSomeStuffof Sub,那么您也必须更改其实现-

DoSomeStuff(NewSubType s) {
    s.someMethod();
}

并且可能还会链接/冒泡到其他几个地方。



 类似资料:
  • 是否将子类对象分配给超类实例类型仅用于重写?或者我们这样做也是为了别的什么? 示例:Sub是Super的子类型,而 请解释一下。

  • 问题内容: 我对Python 3中的和类有些困惑。也许有人可以消除我的困惑或提供一些其他信息。 我目前的理解是,每个类(除外)都从称为的基类继承。但是每个类(包括)也是该类的一个实例,它是自身的实例,并且也从继承。 我的问题是: 是否有一个原因/设计决策,为什么是的实例并从中继承?对象的/ class是否也可以是对象本身? 类()如何成为其自身的实例? 哪一个是真正的基类或? 我一直认为这将是最“

  • 是否真的有必要使用或? 我知道在这个总的话题上有很多问题,例如: 派生类中函数的“virtual”关键字。有必要吗? < Li >“override”关键字是否只是对被重写的虚方法的检查? < li >虚拟?覆盖?还是两者都有?C 从这些和其他标记为重复项的内容中(许多“重复项”的答案都包含至少对我来说是新的不同信息),我学到了一些东西(我认为,大致为什么它们是真的):没有虚拟的覆盖不会编译。没有

  • 问题内容: 怎么有一个类的实例是,而该类不是的子类呢?这是一个例子: 问题答案: 在Python 2中, 类型 和 类 不是同一对象,特别是对于老式类, 它与对象是不同的。因此这是可能的,因为老式类的实例实际上是与其类不同的类型(): 这在新型类中得以解决: 旧样式类不是类型,新样式类是: 旧样式类被声明为已弃用。在Python 3中,只有新型类。等效于并且您的代码将在两次检查中产生。 看一下这个

  • 问题内容: 基于 http://redis.io/topics/faq Redis是内存中的,但是持久存储在磁盘数据库上。 那么我是否知道Redis将键/值保存在内存或磁盘中?或两者? 在Redis中写入值时,它是否同时写入内存和磁盘? 谢谢你的概念。 问题答案: 根据配置方式的不同,redis可以定期将现有状态备份到磁盘,但否则,所有内容都在内存中。

  • 7.1.3 类是类型概念的发展 如上所述,对象可以视为广义的数据,因此和普通数据一样属于某种数据类型。从图 7.3 可以看出,“人”和“电视机”就属于两种完全不同的对象类别,而 John 和 Mary 这两个“人” 对象则具有完全相同的数据构成和操作,只是各自的数据值不同。 用计算机解决问题时,首先需要明确问题中涉及哪些数据,并在程序中将这些数据用编 程语言提供的数据类型表示出来,然后再去考虑需要