3

すべてのインスタンス変数に対して(Scannerクラスを介して)ユーザーからの入力を受け取る引数なしのコンストラクターを作成しようとしていますが、それは別のクラスから継承されています。

どうすればよいですか?

これが私がしたことです:

 public class Manager extends Super_Employee{
     String  manager ;

     /* String GetManger  (){
         return manager ;
     }*/

     Manager (){
        Scanner manager = new Scanner(System.in);
     }

     @Override
     String Print() {
         return ("the manager is : " +manager);
     }

これがスーパークラスです:

 public  class Super_Employee extends abstract_Employee {

     String Fname ;
     String Lname;
     String address;
     int number;
     Super_Employee(String Fname,String Lname, String address, int number)
    {
        System.out.println("Constructing an Employee");
        this.Fname = Fname ;
        this.Lname = Lname;
        this.address = address;
        this.number = number;
    }  


 @Override
    String Print (){
    return ("the employee name is : "+Fname+ " "+ Lname+ " ,the Employee address is  : "
            + address + " ,the employee Phone # : "+number);   
} 
}
4

4 に答える 4

2

いくつかの可能なオプション:

1)静的ビルダーを使用する

public static Manager newManager() {

 .....

return new Manager(.....);

2)引数なしのスーパーコンストラクターを作成します。

Super_Employee() {
   ...
}}

3)「セカンドクラス」を使用できます-かなり醜いです、私はアドバイスしません

public Manager() {
  this(new MyTemp());
}

public Manager(MyTemp temp) {
  super(temp.fname, temp.lname,....);
}
于 2012-08-17T03:46:55.180 に答える
2

スーパークラスでデフォルト以外のコンストラクターを呼び出さないデフォルト コンストラクターをサブクラスで定義する必要がある場合は、サブクラスでデフォルト コンストラクターを提供する必要があります。混乱しますか?例を見てください。

public class Foo {
    public Foo( String x ) {
    }
}

public class Bar extends Foo {
    public Bar() {
        super(); // this is called implicitly even if this line is not provided! compilation error here
    } 
}

上記の例では、サブクラス コンストラクターは、サブクラスの既定のコンストラクターである super() を呼び出すため、スーパークラスで既定のコンストラクターを提供するか、次のようにサブクラスを記述する必要があります。

public class Bar extends Foo {
    public Bar() {
        super( "hadoken!" ); // now it works, since it calls a constructor that exists
    } 
}

ここで、Foo クラスにコンストラクターを指定しない場合は、デフォルトのコンストラクター (コンパイラーによって提供される) が使用されます。

于 2012-08-17T03:35:59.070 に答える
2

引数のないコンストラクターを追加しますSuper_Employee

Super_Employee() { }

以来、あなたは持っています

Super_Employee(String Fname,String Lname, String address, int number) {
    //...

コンパイラはデフォルトのコンストラクター (コンストラクター自体によって提供される引数なしのコンストラクター) を提供しません。

于 2012-08-17T03:37:15.897 に答える
2

あなたのエラーに基づいて、あなたのスーパークラスは 3 つの引数を取るように聞こえますが、これらの 3 つの値の値がまだないため、デフォルトのコンストラクターを使用しようとしています。この場合、ファクトリ メソッドを使用してオブジェクトを構築することをお勧めします。

例:

public class Manager extends Super_Employee{

    /** Factory method, reading constructor arguments from System.in */
    public static Manager make() {
        Scanner s = new Scanner(System.in);
        new Manager(s.next(), s.next(), s.next(), s.nextInt());
    }

    public Manager(String fName, String lName, String address, int number) {
        super(fName, lName, address, number);
    }

     // . . .

ファクトリ メソッドを使用してオブジェクトを構築すると、スーパー コンストラクターを呼び出す前にManager.make()必要なすべての値を読み込むことができますが、これはコンストラクター内からは不可能です。System.inManager

于 2012-08-17T03:37:38.947 に答える