Test.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package com.itant;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.itant.extend.Controller;
  5. import com.itant.gen.DogController;
  6. import com.itant.gen.DogController2;
  7. import com.itant.gen.GController;
  8. import com.itant.gen.GController2;
  9. public class Test {
  10. public static void main(String[] args) {
  11. // TODO Auto-generated method stub
  12. // 可以传dog,可以传cat,但是不能使用具体的dog或cat的特殊方法,除非判断类型并显式强转
  13. Controller controller = new Controller();
  14. controller.setAnimal(new Dog());
  15. //无法执行特殊方法,除非显式强转
  16. //gController.getAnimal().run();
  17. ((Dog)controller.getAnimal()).run();
  18. // 使用的时候再确定具体类型,一旦指定,则不能更改。
  19. // 优势:除了指定父类,还可以指定具体的Dog类,使用Dog的特有方法,而不仅仅是基类的方法
  20. GController<Animal> gController = new GController<Animal>();
  21. gController.setAnimal(new Dog());
  22. gController.getAnimal().sound();
  23. // 泛型是基类,也需要显式强转
  24. GController<Dog> gControllerDog = new GController<Dog>();
  25. gControllerDog.setAnimal(new Dog());
  26. gControllerDog.getAnimal().sound();
  27. gControllerDog.getAnimal().run();
  28. DogController dogController = new DogController();
  29. GController gController2 = dogController;
  30. //通过父类设置添加,使用的时候会强转
  31. gController2.setAnimal(new Cat());
  32. // 通过子类设置,只能传具体类型
  33. //dogController.setAnimal(new Dog());
  34. dogController.getAnimal().sound();
  35. DogController2 dogController2 = new DogController2();
  36. GController2 gController3 = dogController2;
  37. gController3.setAnimal(new Dog());
  38. dogController2.getAnimal().sound();
  39. }
  40. }