問題タブ [subtyping]
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.
java - 継承なしのサブタイプとサブタイプなしの継承?
私のインストラクターは、中間テストのサンプルを投稿しましたが、次の質問について混乱しています。
サブタイプなしの継承と継承なしのサブタイプの例を示します。
以下の定義を使用し、Java でプログラミングしています: http://www.cmi.ac.in/~madhavan/courses/pl2006/lecturenotes/lecture-notes/node28.html
この 2 つの考えを表すには、どのように表現すればよいでしょうか?
oop - OOP でのサブセットとサブタイピング
「A」が「B」のサブタイプである場合、「A」は「B」のすべてのフィールドとメソッドを継承し、さらに「A」には独自のメソッドとフィールドがあることを意味します。'A' は 'B' のスーパーセットと見なされるべきですか? サブタイピングのサブセット解釈はどのように有効ですか? 逆であってはいけませんか?
しかし、「車」と「乗り物」という 2 つのクラスがある場合、「車」のセットが「乗り物」のセットのサブセットであることは理にかなっています。ただし、「Cars」のフィールドとメソッドは「Vehicles」のスーパーセットです。だから私はこれに関して少し混乱しています。
java - スーパーを使用するメソッドは、オブジェクトのサブタイプを取得してリストに追加できますか?
したがって、以下の関数は、オブジェクトを受け取り、Car
それをオブジェクトに追加する関数であると想定されていCol<>
ます。
質問は、オブジェクト型の変数をn
型の変数に追加することが機能するかどうかを尋ねました(つまり. )Nissan
c
List<Car>
insertCar(c, n)
答えはイエスですが、理由はわかりません。Car
を使用しているため、オブジェクトのサブタイプを追加することはできないと思いましたsuper
。Car
type の型または のスーパータイプのみを取ることCar
。
私に理解できる人はいますか?
編集それは...
List<>
それ自体が渡された他のサブタイプであった場合、日産を追加することはできませんか? たとえば、List<? super Car>
実際にあった場合List<? super Ford>
以下に相反する回答があるようですが、これは試験のレビュー用に提供された質問であるため、提供された質問と回答が正しいことを確認してください。それについての私の理解は、私がよくわからないことです。
java - Java クラスのサブタイプ
クラス Instructor があり、クラス person をそのサブタイプにしたい場合、どのようにサブタイプを設定すればよいかわかりません。私は class Instructor {} extends Person を試しました そして、私はいつもエラーを受け取ります
scala - Kotlinの@uncheckedVariance?
講演Compilers are Databasesで、Martin Odersky は興味深い分散コーナー ケースを提示します。
T
Tree[Type]
型付きツリー ( ) を型なしツリー ( ) のサブタイプと考えると便利ですが、その逆ではないため、 は反変であると定義されますTree[Nothing]
。
通常、Scala コンパイラはT
、メソッドの戻り値の型として表示されることに文句を言うでしょうtpe
。そのため、Martin は注釈を付けてコンパイラをシャットダウンし@uncheckedVariance
ます。
Kotlin に翻訳された例を次に示します。
予想どおり、Kotlin コンパイラT
は「アウト」の位置に表示されると文句を言います。Kotlin には に似たものがあり@uncheckedVariance
ますか? または、この特定の問題を解決するためのより良い方法はありますか?
c++ - std::any は型消去、サブタイピング、またはポリモーフィズムを採用していますか?
ブースト anyおよび実験的 anyに関するドキュメントを読んでいる間、型消去
についての言及は見当たりませんでした。
C++に適用される「型消去」の概念を理解しようとしています。
「any」型は値を格納するときに「型消去」を使用するというのは正しいですか?
値を格納するときに「ポリモーフィズム」を使用するというのは正しいですか?
「型消去」は一種の「ポリモーフィズム」ですか?
ポリモーフィズムに関するウィキペディアの記事にも、「型消去」については言及されていません。
「サブタイピング」について言及しています。「型消去」は一種の「サブタイピング」ですか?
この質問が別の方向に向かっているように思われる場合は申し訳ありません。
要約する、
「型消去」、「ポリモーフシム」、および「サブタイピング」は、C ++の任意の型とどのように関係していますか?
typescript - TypeScript: サブタイプと共変の引数の型
常識的には、サブタイプは戻り値の型に関しては共変であるが、引数の型に関しては反変でなければならないことを示唆しています。したがって、 の引数の型が厳密に共変であるため、次のものは拒否する必要がありますE.f
。
実際、プログラムを実行すると印刷されます
だから:(1)ここでの理論的根拠は何ですか(おそらく1つあると思われますが、満足のいくものではなく、JavaScriptyです)。(2)この状況でコンパイラが警告を省略できない実際的な理由はありますか?