0

私はJavaにかなり慣れていないので、この動作に少し混乱しています

public class MyBase<T> {
static int id;
}

public class DerA extends MyBase<DerA> {
}

public class DerB extends MyBase<DerB> {
}

私は とが 2 つの異なる変数であることを期待DerA.idしています。しかし、それは同じものを共有しているようです!!! この動作は私には意味がありません.2つの異なるタイプです.Deridstatic

4

2 に答える 2

5

ジェネリックはこれとは何の関係もありません。C++ のテンプレートとは異なりMyBase、実行時にクラスが 1 つしかないため (これはType Erasureと呼ばれます)、静的変数は 1 つしかありません。

static変数は、それらが定義されているクラスにのみ属します。どちらの導関数にもこの変数はありません。必要なものは (Smalltalk などの他の言語では)クラス変数と呼ばれますが、Java にはそのようなものはありません。

于 2013-09-26T21:33:47.660 に答える