-6
int x=22;
long z=24;
//now in this case int is smaller than long so
z=x; // is quite appropriate as it implicitly converts from int to long(widening)

同様に、次のようなクラスがあります。

private static class Box {
    private int width;
    private int height;
    private int length;
    //...
}

private static class WeightBox extends Box {
    private int weight;
    //...
}

public class Main {
    public static void main(String args[]) {
        Box simpleBox = new Box();
        WeightBox wt = new WeightBox();
        simpleBox = wt; //we can always do this
        //wt = simpleBox cannot be done implicitly 
        //for this to work we have to use type casts
    }
}

simpleBox = wtsimpleBoxが基本クラスに属し、wtが拡張クラスに属しているのに、なぜそれができるのでしょうか。拡張クラスは基本クラスよりも大きくすべきではありませんか?

4

2 に答える 2

0

鋳造を検討する場合、サイズは関係ありません。アップキャストとダウンキャストについては、このチュートリアルを確認してください。便利なことに、それはJavaにあります。:)

于 2012-05-31T01:13:07.667 に答える
0

あなたが宣言したので:

Box simpleBox = new Box();

この場合、「simpleBox」変数は「Box」型で宣言されています。これは、Boxと互換性のある割り当てである任意のオブジェクトインスタンスを再割り当てできることを意味します。宣言時に、同じクラスの値を指定しました。

wtは、「Box」のサブクラスである「WeightBox」として宣言されているため、割り当てと互換性があります(前述のリスコフの置換原則)。これを行うのと同じです:

List<String> list = new ArrayList<String>();
list = new LinkedList<String>();

ArrayListとLinkedListはどちらも、Listと割り当て互換です。

実行時にこれを確認したい場合は、クラス自体に対する簡単な操作です。

Box.class.isAssignableFrom(WeightBox.class)
于 2012-05-31T02:28:45.230 に答える