0

プログラミング言語では、子オブジェクトが親の代わりとして機能する必要がある場合でも、(子であることの) 独自のアイデンティティを失わないようにする場合は、親の許可が必要です。そのため、C# または C++ でそのようなメソッドを仮想化します。そして、これは完全な隠蔽になります。完全な非表示は Java でのオーバーライドと見なされますか? 99% の確率で、ここでは間違った概念を持っています。オーバーライドされた関数は、JAVA だけが関係しているのと同じように完全に隠蔽できますか?

4

1 に答える 1

1

Liskkiov の置換の原則は、具体的な子の実装ではなく抽象的な親の実装を返す関数にリンクされています。例えば

ArrayList getList vs List getList

上記の例では、最初のケースでは getList メソッドが具体的な List 実装を返し、2 番目のケースでは getList メソッドが List インターフェイスのインスタンスを返します。Liskov の置換原則に従って、2 番目の方法を使用する必要があります。これは、2 番目のメソッドをサブクラスでオーバーライドして、List のさまざまな具体的な実装を返すことができるためです。一方、最初のインスタンスでは、ArrayList のサブクラスの ArrayList のみを返すことができます。したがって、最初のケースは 2 番目のケースよりも抽象度が低く、Liskov の置換原則に従って、子が必要に応じて自由に実装できるように、親の実装は可能な限り抽象化する必要があります。

Regarding method hiding so that is only possible with static methods. Overriding in java does not hide the method since its at instance level. However for static methods, since the method is at class level, polymorphism is not possible , and thus while they are inherited if a sub class creates a static method with the same name,arguments and return type and tries to access the method statically the sub classes version would be called and not the super classes version as the sub class has now effictively hidden the method from the super class.

于 2016-10-26T05:57:17.767 に答える