1

クラスAとBは2つの異なるパッケージに含まれており、クラスAを変更したりクラスBをクラスAの同じパッケージに入れたりすることはできないことを念頭に置いて、次のことができるようにしたいと思います。

class A{
    A(){
        //stuff
    }
}

class B extends A{
    public B(){
        //stuff
    }
}

このコードは「シンボルが見つかりません:コンストラクターA」を与えます。それを回避する方法はありますか?

4

4 に答える 4

3

クラス A を変更できない場合は、A があるパッケージに新しいクラスを追加し、A を使用するように拡張してから、B を使用して新しいクラスから拡張することができます。

于 2012-11-26T12:35:15.510 に答える
2

クラスがそのコンストラクターで最初に行うことは、そのスーパークラスのコンストラクターを呼び出すことです。クラス A には public no-arg コンストラクタがないため、試みている方法で B を拡張することはできません。

引数を取る public コンストラクターがある場合、super(arg1, ...); を呼び出す限り、それを拡張できます。クラスのコンストラクターでの最初の呼び出しとして:

public B()
{
    super(arg1, arg2, argN);
    // stuff
}
于 2012-11-26T12:01:04.827 に答える
2

クラス A を publicにしない限り、クラス Aはパッケージ レベルにのみ限定されるデフォルトのスコープがあるため、NOANSWERです。パッケージの外からアクセスできるようにするには、パブリックとしてマークします

于 2012-11-26T11:56:39.113 に答える
0

Bクラスを と同じパッケージに入れることはできないと言いますA。しかし、そのパッケージにヘルパー クラス H を含めることはできますか? つまり:

package a;

class A { ... }

package a;

public class Helper extends A {
    public Helper() { }
}     

package b;

import a.Helper;

class B extends Helper {
    B() { }
}

密封されたパッケージを扱っているのでこれは不可能だと思いますが、そうでない場合は、このソリューションが機能するはずです。

于 2012-11-26T14:58:38.263 に答える