问题标签 [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 投票
1 回答
99 浏览

c# - 在返回派生类型的派生接口中隐藏属性是否可以接受?

TL;博士

在接口中隐藏属性以便我可以更改其声明以返回原始属性的派生类型有什么问题?

我敢肯定这一定是以前问过的,但我找不到它,并为这个冗长的问题道歉。

说我有这种情况:

我希望 的用户MoreSpecificA能够获得 B ,即MoreSpecificB. 他们可以通过调用TheB和强制转换来做到这一点,或者他们可以调用方法TheMoreSpecificB。我也可以MoreSpecificA这样声明:

这样他们现在就可以使用相同的方法并取回MoreSpecificB.

使用new隐藏方法让我很紧张,那么为什么这是一个坏主意呢?在这里做这件事似乎很合理。

在大多数情况下,我看到的一般建议似乎是改用泛型,但这似乎有一个问题,如果我有一个MoreSpecificA并且我想在一个声明返回类型的方法中返回它,A那么我有具有MoreSpecificA扩展A,这在访问实例时会产生歧义,TheB因为MoreSpecificA它不知道您是否想要A.TheBMoreSpecificA.TheB

这可以通过在 MoreSpecificA 上声明一个新的 TheB 来解决(但又是新问题)。

如果 MoreSpecificA 没有扩展 A,那么blah上面类中的第一个方法现在会抱怨,因为 MoreSpcificA 无法转换为 A。

在写这篇文章时,我注意到如果我声明我的 BaseA 是这样的逆变:

我的班级是

然后我得到两全其美。此解决方案的适用性是否取决于是否A添加任何内容ABase

还是我最初的计划只是将方法隐藏在派生类型中以返回原始方法的派生类型好吗?

0 投票
17 回答
50982 浏览

java - 覆盖与隐藏 Java - 困惑

我对覆盖与隐藏在 Java 中的区别感到困惑。任何人都可以提供有关这些差异的更多详细信息吗?我阅读了Java 教程,但示例代码仍然让我感到困惑。

更清楚地说,我理解压倒一切。我的问题是我看不出隐藏有什么不同,除了一个在实例级别而另一个在类级别。

查看Java教程代码:

然后我们有一个子类Cat

然后他们说:

该程序的输出如下:

Animal 中的类方法。

Cat 中的实例方法。

testClassMethod()对我来说,直接从Animal类调用类方法执行类中的方法这一事实Animal非常明显,没有什么特别之处。然后他们testInstanceMethod()从对 的引用中调用myCat,因此很明显,当时执行的方法是 的实例中的方法Cat

据我所知,调用隐藏的行为就像覆盖一样,那么为什么要区分呢?如果我使用上面的类运行此代码:

我会得到: Cat 中的类方法。 但是如果我testClassMethod()从 Cat 中删除,那么我会得到: Animal 中的类方法。

这告诉我,在子类中编写一个与父类具有相同签名的静态方法几乎可以实现覆盖。

希望我能弄清楚我在哪里感到困惑,并且有人可以解释一下。首先十分感谢!

0 投票
1 回答
2312 浏览

java - Java中的方法隐藏

可能重复:
覆盖与隐藏 Java - 困惑

有人可以用一个例子解释Java中的方法隐藏以及我们为什么使用方法隐藏吗?

我阅读了 Oracle 的教程,但无法理解。

0 投票
1 回答
1074 浏览

c# - C#:将一个接口继承给另一个将充当 wcf 接口的接口

我已经问了一些与此相关的问题,但仍然没有确凿的答案,所以这里有一个更简单的问题。

考虑一下。我有2个接口。一个描述一个道。一种是 wcf 接口。wcf 接口继承了 dao 接口,以便使用 wcf 属性公开其方法。因为它是一个 wcf 接口,我当然必须再次声明这些方法,以便在它们上放置 wcf 属性,例如 [OperationContract]。结果,我实际上隐藏了以前的接口方法,并且必须在它们上放置“新”关键字。在这种情况下这样做是否正确。我需要能够通过 wcf 接口呈现 dao 接口方法,因此是继承它的原因。我想强制 wcf 接口公开这些功能。看来我的手很紧,我必须使用这种方法才能暴露这些方法,但你怎么看?

在代码方面,它看起来像这样:

0 投票
2 回答
1673 浏览

c# - 在泛型派生类中隐藏基类方法

我有一个这样的基类:

还有一个像这样的子类:

如果用户创建了一个Foo<string>名为“fooString”的对象,那么他可以同时调用这两个对象fooString.Do(5)fooString.Do("test")但是如果他创建了一个Foo<int>名为“fooInt”的对象,他只能调用派生类的 Do 方法。我更喜欢第二个,不管是什么T

这两个类中的 Do 方法本质上是做同样的事情。派生类中的一个Dictionary<T, int>使用给定参数从 a 中获取一个整数,并使用它调用基类的 Do 方法。

这就是为什么我要隐藏FooBasein的 Do 方法Foo<T>。我怎样才能做到这一点或类似的东西?任何克服这个问题的设计建议也很好。

0 投票
1 回答
886 浏览

c++ - 命名空间中的函数阴影

假设您有以下代码

如果在命名空间 a 中定义(第 3 行未注释),它会影响andvoid f(int){}的后续定义,但不会影响。为什么?void f(b::T){}void f(a::S){}void f(X){}

0 投票
2 回答
2304 浏览

java - Benefit of method hiding in java

I have read about method hiding concept in Java but I am not sure I understand the advantages. In which cases would method hiding be useful?

0 投票
3 回答
816 浏览

c# - 方法覆盖和方法隐藏的执行流程

我对以下场景感到困惑,我们有一组这样的类

当我调用以下方法时

我得到这样的输出

BBDD

为什么调用的是继承的方法,而不是声明类型中的方法,为什么不是D每次都调用类中的方法?

0 投票
5 回答
6534 浏览

java - java非静态到静态方法——隐藏或覆盖

是否在子类中重新定义非静态方法,但一切都相同,但静态覆盖或隐藏它?

http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html说隐藏。但是当我将超类方法声明为 final 时,我得到一个覆盖错误。

超类声明是

子类:

给出覆盖错误。

0 投票
3 回答
1359 浏览

java - 调用基础重绘方法?

我有两节课:

在简短的搜索中,我发现无法从基类调用基覆盖方法,问题是,如何在 A 中调用 A 的repaint方法?我知道 a 可以创建基本方法,而另一种方法可以显式扩展,如此处所述,但是,因为是一个必须对所有孩子通用的方法,才能遵循 java 设计模式,并且最最重要的是,如果另一个程序员继续我的工作,他会寻找重绘方法,有什么建议吗?

编辑:对不起,我忘了提到 A 类是抽象的,所以 A 的所有实例也是 B (想象一下,A 类的孩子更多,所以我不能完全在 B 中完成实现,因为我需要 A) 的所有子项中的这种行为,而且,我需要这样做是因为我需要在执行的某些部分刷新 A 的视图,但我只想绘制 A 的相应部分而不刷新这些孩子。