2017-04-06 2 views
1

子クラスのジェネリックタイプを変更するにはどうすればよいですか?私は、メソッドload()をオーバーライドできることを知っています。しかし、私はすべての子供のための普遍的な方法を作りたい。 私は負荷()Javaの子クラスのジェネリックタイプを変更するにはどうすればいいですか

public abstract class Vehicle <T extends Human> { 
    T t; 
    private final int maxPassengers; 
    private Set<T> currentPassengers = new HashSet<>(); 

    public Vehicle(int maxPassengers) { 
     this.maxPassengers = maxPassengers; 
    } 

    public void load (T human) throws ToManyPassangersExeption { 
     if (currentPassengers.size()<maxPassengers) 
      currentPassengers.add(human); 
     else 
      throw new ToManyPassangersExeption(); 
    } 
} 

抽象スーパークラスを持っているが車両に人間をロード実現します。私は人間の種類が異なっています。例:

public class Policeman extends Human { 
    } 

私のクラスPoliceCarでは、何が唯一の警察官を読み込むのですか?

public class PoliceCar <T extends Policeman> extends Vehicle { 
    T t; 

    public PoliceCar() { 
     super(5); 
    } 
} 

このコードを使用すると、私はHumanからPoliceCarまでのすべてのインスタンスを読み込むことができます。

メソッドload()をオーバーライドしないでPoliceCarにポリシマンだけをロードするにはどうすればよいですか?そしてload方法はTPolicemanのサブクラスであるTパラメータを必要とする

class PoliceCar<T extends Policeman> extends Vehicle<T> 

答えて

1

は、非生スーパー有するPoliceCar型を宣言します。

What is a raw type and why shouldn't we use it?を参照してください。

+1

「PoliceCar extend Vehicle 」だけでもうまくいくかもしれません。 @ Zefick確かに – Zefick

+0

。しかし、重要なビットは 'Vehicle'に型パラメータを追加しています。 –

+0

ありがとう!今は仕事! –

関連する問題