1

私のコードにはこの問題があります。2 つのインスタンス変数を持つクラス Employee を作成します。

private String name, department;

その後、Employee の拡張である Tradesman という別のクラスを作成しますが、インスタンス変数が 1 つ追加されます。

private String trade;

今私がしたことは、次のprint()メソッドを作成したことです: A) Employee クラスで、namedepartmentを出力します。B) Employee で使用されるのと同じメソッドが Tradesman で作成され (したがってオーバーライドされ)、tradeである追加の 1 つの要素が出力されます。ここで、いくつかの要素の型の配列を含むStaffという別のクラスを作成し、メソッド、メソッド、および配列全体を出力するメソッドを実装する必要があります。印刷の瞬間まで、すべてがクールで意地悪です。クラスごとにメソッドがあるため、印刷方法に苦労していますが、タイプに依存する必要があります...メソッドを従業員にキャストするとObjecthire()fire()put()print()Tradesman クラスの貿易要素を失います。例:

void put(){
    for (Object a:objArray){
        ((Employee)a).print();
    }
}

これは間違っています。Tradesman を雇った場合、このメソッドは Trade を出力しません。この問題に対処するには?前もって感謝します!乾杯^^

4

3 に答える 3

1

「商人を雇うと、この方法では商売が印刷されないからです」

あなたは間違っています、そうなるでしょう。Employeeが実際に の場合Tradesman、呼び出しprint()は を呼び出しますTradesman.print()。オーバーライドされている場合は、オーバーライド メソッドが呼び出されます。すべての配列オブジェクトが の場合は、の代わりにをEmployee使用するだけで、無駄なキャストを行う必要がなくなります。Employee[]Object[]

「Tradesman と Employee の両方の配列を実装したい... Tradesman と Employee を組み合わせた両方を含む 1 つの配列。」

Employee[]Tradesmanaは であるため、両方を保持しEmployeeます。Listまた、Javaでは、 (あなたの場合は)を使用することをお勧めしますList<Employee>。配列よりも扱いやすいです。

于 2013-11-04T14:51:35.650 に答える
1

基礎となるオブジェクトにaTradesmanをキャストしても、タイプは変わらず、オーバーライドされたメソッドを使用します。EmployeeTradesmanprint

于 2013-11-04T14:51:43.763 に答える
0

これを試して

import java.util.ArrayList;

class Employee {
  String name,department;

  public Employee(String name, String department) {
   this.name = name;
   this.department = department;
  }

  public void print() {
   System.out.println("Name: " + this.name);
   System.out.println("Department: " + this.department);
  }
}

class Tradesman extends Employee {

  String trade;

  public Tradesman(String name, String department, String trade) {
   super(name,department);
   this.trade = trade;
  }

 public void print() {
   super.print();
   System.out.println("Trade: " + this.trade);

 }
}

class Staff {

  ArrayList<Employee> empArray = new ArrayList<Employee>();

  public void put() {
    for(Employee emp : empArray) {
     emp.print();
    }
  }

  public static void main(String[] arg) {

    Staff s = new Staff();
    s.empArray.add(new Employee("John","Sales"));
    s.empArray.add(new Tradesman("Jacob","Sales","Computers"));

    s.put();
 }

}
于 2013-11-04T15:06:59.953 に答える