0

ここでJava初心者、私は次のコードのチャンクの出力を見つけようとしています:私はJavaのいくつかの基本が欠けていることを知っていますが、誰かが私を導くことができれば私はそれをいただければ幸いです。

public class Test4 {
    public static void main(String[] args) {
        C c = new C(1, 2); // creates an obj c with arguments
        D d = (D) c; // creates class obj 'D' and casts 'c' to D?
        System.out.println(d.getP());
        System.out.println(d.getProd());
    }
}

public class C {
    protected int m;
    protected int n;
    protected static int kappa = 0;

    public C(int m1) {
        this.m = m1;
        this.n = m1;
        kappa = kappa + 2;
    }

    public C(int m1, int n1) {
        this.m = m1;
        this.n = n1;
        kappa = kappa + 2;
    }

    public int getSum() {
        return m + n;
    }

    public int getProd() {
        return m * n;
    }

    public static int getKappa() {
        return kappa;
    }
}

public class D extends C {
    private int p;

    public D(int p1) {
        super(p1);
        this.p = p1;
    }

    public D(int k1, int n1, int p1) {
        super(k1, n1);
        p = p1;
    }

    public int getP() {
        return p;
    }

    public int getSum() {
        return m + n + p;
    }
}
4

1 に答える 1

1

DクラスはCを拡張するため、DをCのタイプ(C c = new D();)として使用できますが、CをDのタイプとして使用することはできません(これは間違っています) D d = new C();

だからあなたのコードで

C c = new C(1, 2); // creates an obj c with arguments
D d = (D) c; // <--this will generate ClassCastException
于 2012-06-23T23:28:17.543 に答える