问题标签 [method-hiding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
733 浏览

c++ - C++ 命名空间名称隐藏

假设这段代码:

有没有办法在没有 :: 的情况下在 abc 命名空间中调用 std::sqrt?在我的项目中,我最初没有使用命名空间,因此所有重载的函数都是可见的。如果我引入命名空间 abc 这意味着我必须手动检查所有被我的重载隐藏的函数并添加 ::

处理这个问题的正确方法是什么?

0 投票
3 回答
87 浏览

c# - 继承的方法无法访问派生类中的新实现

正如此MSDN 文章中所引用的:

派生类的类型对象无法访问从基类继承的重新定义的新方法,继承的ShowDetails()Method内部的Method对派生类对象的调用是对基类DescribeCar()ShowDetails()Method进行的。

如果DescribeCar()Method也是ConvertibleCar类可用的,怎么就看不到所谓的new ShowDetails()Method呢?

0 投票
4 回答
3677 浏览

c# - 在基类的派生类对象上调用“this”关键字类型

如果我有这样的事情:

并使用以下代码调用它,

然后Name调用基类的方法。this但是该方法中关键字的实际类型是Write什么?如果那是Derived类型(当程序控件进入Write方法中的第一个 if 块时),那么它正在调用基Name方法,为什么显式转换(Derived)this,改变对Name派生类方法的调用?

0 投票
0 回答
713 浏览

c++ - 隐藏基本功能的警告

我有一个 C++ 代码库,其中基类中的一些非虚拟方法或被派生类中的虚拟或非虚拟方法覆盖/隐藏。大多数情况下,这是代码中的错误。

我可以做些什么来自动检查诸如编译器警告或工具之类的情况?

这类似于防止派生类从基中隐藏非虚拟函数没有警告隐藏具有类似原型的非虚拟方法(G++ 4.4),但我正在寻找一种实际的解决方案来检测现有代码库中的这些问题。也许只是对隐藏功能的警告就足够了(我认为该列表足够小,可以一一浏览)

手动更改代码库以添加“覆盖”或“最终”左右不是一种选择,因为此检查只应执行一次。像定义“最终”所有非虚拟功能以防止它们被隐藏的全局解决方案是可以的。

我正在使用 Visual Studio 2012,但也可以访问 ubuntu 和 gcc。

0 投票
1 回答
589 浏览

ruby - Ruby 隐藏与覆盖

我刚刚了解到,在 Java 中,覆盖和隐藏之间存在区别(静态方法被隐藏而不是覆盖),这意味着 Java 使用早期绑定和后期绑定。

是否有类似于方法隐藏的东西,或者它只是有方法覆盖?

0 投票
4 回答
267 浏览

java - hiding method in java inheritance

I have two class as following:

After I run above sample, this output is printed:

CAR

My question is: Why is the method getWord() not overriden?

0 投票
1 回答
200 浏览

java - 为什么Java限制隐藏方法的访问修饰符

隐藏静态字段时,该字段在子类中的访问级别没有限制,甚至可以是非静态的,也可以是其他数据类型。

另一方面,当隐藏静态方法时,子类的静态方法对超类隐藏静态方法可以允许比隐藏方法更多但不能更少的访问。

AFAIK,静态方法链接无论如何都是在编译时完成的,那么为什么会有这样的限制呢?

PS这个问题只是出于好奇。

0 投票
2 回答
2060 浏览

java - Java - 隐藏覆盖和修饰符 final

我找不到像我这样的问题,所以我希望它不是重复的。

再次是关于覆盖和隐藏。我认为——但我可能错了——我都理解。

以下代码按预期运行,两种方法都已隐藏。method1因为它是私有方法,私有方法不能被覆盖,只能隐藏,method2因为它是静态的,静态方法不能被覆盖,它们只能被隐藏。

如果我阅读规格,它会说:

http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.3.3

可以将方法声明为 final 以防止子类覆盖或隐藏它。

如果我将父类中的 method1 更改为“final”

一切正常。编辑开始:我预计会出现编译器错误,说最终方法无法隐藏,但这并没有发生。:编辑结束

问题 1:这是否意味着只能隐藏静态方法?在我正在阅读的书中(OCA 学习指南,Jeanne Boyarsky 和 ​​Scott Selikoff 第 252 页),他们清楚地说隐藏了一种私有方法。

然后我将 Parent 类中的 method2 更改为

现在编译器确实抱怨了,错误说“Child cannot override method2()”这很令人困惑,因为我以为我试图隐藏一个方法。

问题2:不应该是“孩子不能隐藏method2()”吗?

编辑开始:我很清楚这里没有覆盖,但正如提到的规范指出的那样:修饰符 final 防止方法被覆盖或隐藏,这就是我把它放在标题中的原因。:编辑结束

0 投票
2 回答
47 浏览

c# - 在创建与超类中具有相同签名的方法时使用 new 关键字?

回到 CS101 真的很快。我正在尝试扩展Add类中方法的行为ConcurrentDictionary。由于它不是virtual或者abstract我不必用override关键字标记它,我可以简单地在我的子类中创建一个具有相同签名的新函数。

虽然当我这样做时,我注意到一条视觉工作室消息说

如果打算隐藏,请使用 new 关键字。

当从子类的实例调用时,使用 this 关键字会改变方法的执行方式吗?

例如在下面的代码中,如果我有一个类的实例MyClassEx并且我调用了,Method1那么Method1在超类中将不会被正确调用(只有当我自己用 调用它时base)?。如果我要调用Method2相同的结果会发生相同的实例,只有子类Method2会执行?

以这种方式使用new关键字只是“良好的编码”还是有一些效果?

编辑:看起来这只是“良好的编码”。虽然它引起了轻微的担忧。我希望Add在子类中创建一个新方法来改变ConcurrentDictionary方法的行为。尽管从链接的答案看来,另一个编码人员可以通过简单地引用超类的子类来绕过我的新实现。

在这种情况下,他们可以调用超类的Method2(默认行为)而忽略我已经实现的行为?

0 投票
3 回答
1311 浏览

java - 超类变量的子类引用?

当一个类扩展一个类时,我们可以在为子类对象分配内存的同时使用超类引用。到目前为止我的理解是可以这样做,因为子类继承了其父类的数据,但它无法访问子类的成员,因为它只是引用,因此不知道添加了什么由子类完成。

我的问题是当我将方法隐藏到上述概念中时,超类引用变量开始引用子类函数。这是为什么 ?为什么它没有像它应该的那样调用它自己的方法?