[解決済み] Javaでオーバーロードとオーバーライドの両方で共分散と共分散を示す関数の例を挙げてください。[クローズド]
2022-10-19 18:15:46
質問
Javaで共分散と共分散の良い例を示してください。
どのように解決するのですか?
共分散です。
class Super {
Object getSomething(){}
}
class Sub extends Super {
String getSomething() {}
}
Sub#getSomethingはSuper#getSomethingの戻り値のサブクラスを返すので共変量です(ただしSuper.getSomething()の契約を履行する)。
共変
class Super{
void doSomething(String parameter)
}
class Sub extends Super{
void doSomething(Object parameter)
}
Sub#doSomethingはSuper#doSomethingのパラメータのスーパークラスのパラメータを取るので、contravariantです(ただし、ここでもSuper#doSomethingの契約を満たしている)。
注意:この例はJavaではうまくいきません。Java コンパイラーは doSomething()-Method をオーバーライドせず、オーバーロードしてしまうからです。他の言語では、このスタイルのContravarianceをサポートしています。
ジェネリックス
Genericsでも可能です。
List<String> aList...
List<? extends Object> covariantList = aList;
List<? super String> contravariantList = aList;
のすべてのメソッドにアクセスできるようになりました。
covariantList
のすべてのメソッドにアクセスできるようになりました。
は
しかし、ゲッターは問題なく動作します(返されるオブジェクトは常に "Object" 型であるため)。
その逆は
contravariantList
: 一般的なパラメータを持つすべてのメソッドにアクセスできますが(それは "String" のスーパークラスでなければならないことが分かっているので、常に1つを渡すことができます)、ゲッターはありません(戻り値の型は String の他のスーパータイプであってもかまいません)。
関連
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
SLF4J: クラス・パスに複数のSLF4Jバインディングが含まれています。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
Junitのユニットテストエラー
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
htmlとwordの相互変換の実装(画像あり)
-
[解決済み] 共分散、不変化、共分散をわかりやすく解説?