在C#中,有两种机制可以通过其子类重新定义或提供父类方法的新实现,这两种机制被称为“方法重写”和“方法隐藏”。现在,基于重新实现方法的方式,我们可以区分两者。
以下是方法重写和方法隐藏之间的重要区别。
序号 | 键 | 方法覆盖 | 方法隐藏 |
---|---|---|---|
1 | 定义 | 方法重写是一种实现多态的机制,其中超类和子类具有相同的方法,包括参数和签名,并且当您使用子类对象调用它时,将调用子类中的实现。 | 另一方面,“方法隐藏”可以定义为一种技术,其中用户可以使用new关键字重新定义基类或父类的方法,从而隐藏该特定方法的基类提供的主要基本实现。 |
2 | 父级实现的访问 | 在“方法重写”中,子类可以访问父类的方法实现。 | 如果是方法隐藏,则无法通过子类引用访问父类方法的实现。 |
3 | 使用的修饰符 | 对于方法重写,使用了override关键字。 | 在方法隐藏的情况下,new关键字用于在子类中定义新的实现。 |
4 | 实现类型 | 在“方法重写”中,方法的实现类型为对象类型。 | 但是,另一方面,“方法隐藏”中的方法的实现类型是引用类型。 |
5 | 父项到子项引用 | 在“方法重写”中,当父类引用变量指向子类的对象时,它将在子类中调用被重写的方法。 | 另一方面,在“方法隐藏”中,当父类引用变量指向子类的对象时,它将调用父类中的隐藏方法。 |
6 | 用法 | 方法重写仅重新定义方法的实现。 | 方法隐藏可以完全重新定义方法。 |
问题内容: 用修饰的功能和用修饰的功能有什么区别? 问题答案: 也许有点示例代码将有助于:发现其中的差别在调用签名,并且: 以下是对象实例调用方法的常用方法。对象实例,a作为第一个参数隐式传递。 使用时,对象实例的类作为第一个参数而不是隐式传递。 你也可以使用该类进行呼叫。实际上,如果你将某些东西定义为类方法,则可能是因为你打算从类而不是从类实例调用它。本来会引发,但效果很好: 人们发现类方法的一
问题内容: Django 有两种方法,和。该文档说: 与gregation()不同,annotate()不是终端子句。annotate()子句的输出是QuerySet。 它们之间还有其他区别吗?如果没有,那为什么存在呢? 问题答案: 我将重点放在示例查询而不是文档中的引用上。A计算整个查询集的值。计算查询集中每个项目的汇总值。 聚合 返回包含查询集中所有书籍的平均价格的字典。 注解 q 是书籍的查
问题内容: 我只是在阅读教科书中给我的课文,我不确定自己是否明白我在说什么。这基本上是在告诉我静态方法或类方法包括关键字“修饰符” static。但是我真的不知道那意味着什么吗? 有人可以简单地向我解释什么是静态方法或类方法吗? 另外,我可以简单解释一下什么是Instance方法吗? 这是他们在教科书中给我的: 存在或不存在静态修饰符具有重要的实际意义。一旦Java处理了它所属的类的定义,就可以调
当我试着运行这段代码时,它给了我30。有人能解释一下吗!我知道在Java中不能重写静态方法,因为多态性和静态方法不能一起工作。静态方法在类上调用,而不是在实例中调用。但有人能就这个话题做进一步解释吗。我真的不明白为什么我的分数是30而不是10。谢谢
问题内容: 我知道,无论与就将计算在东西在AngularJS变化。但是无法理解两者之间到底有什么区别。 我最初的理解是为角表达式计算的,这些角表达式是HTML端在执行函数时所执行的条件。我的想法是否正确? 问题答案: $observe() 是Attributes对象上的一种方法,因此,它只能用于观察/监视DOM属性的值更改。仅用于/调用内部指令。当您需要观察/观察包含插值的DOM属性(即{{}})
问题内容: 我在阅读PEP 0008(样式指南)时,发现它建议在实例方法中使用self作为第一个参数,而在类方法中使用cls作为第一个参数。 我已经使用并编写了一些类,但从未遇到过类方法(嗯,一种将cls作为参数传递的方法)。有人可以告诉我一些例子吗? 谢谢! 问题答案: 实例方法 创建实例方法时,第一个参数始终为。您可以随意命名,但含义始终相同,并且由于其是命名约定,因此应使用。 (通常)在调用