|
@@ -0,0 +1,52 @@
|
|
|
|
|
+package com.itant;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+
|
|
|
|
|
+import com.itant.extend.Controller;
|
|
|
|
|
+import com.itant.gen.DogController;
|
|
|
|
|
+import com.itant.gen.DogController2;
|
|
|
|
|
+import com.itant.gen.GController;
|
|
|
|
|
+import com.itant.gen.GController2;
|
|
|
|
|
+
|
|
|
|
|
+public class Test {
|
|
|
|
|
+
|
|
|
|
|
+ public static void main(String[] args) {
|
|
|
|
|
+ // TODO Auto-generated method stub
|
|
|
|
|
+
|
|
|
|
|
+ // 可以传dog,可以传cat,但是不能使用具体的dog或cat的特殊方法,除非判断类型并显式强转
|
|
|
|
|
+ Controller controller = new Controller();
|
|
|
|
|
+ controller.setAnimal(new Dog());
|
|
|
|
|
+ //无法执行特殊方法,除非显式强转
|
|
|
|
|
+ //gController.getAnimal().run();
|
|
|
|
|
+ ((Dog)controller.getAnimal()).run();
|
|
|
|
|
+
|
|
|
|
|
+ // 使用的时候再确定具体类型,一旦指定,则不能更改。
|
|
|
|
|
+ // 优势:除了指定父类,还可以指定具体的Dog类,使用Dog的特有方法,而不仅仅是基类的方法
|
|
|
|
|
+ GController<Animal> gController = new GController<Animal>();
|
|
|
|
|
+ gController.setAnimal(new Dog());
|
|
|
|
|
+ gController.getAnimal().sound();
|
|
|
|
|
+ // 泛型是基类,也需要显式强转
|
|
|
|
|
+
|
|
|
|
|
+ GController<Dog> gControllerDog = new GController<Dog>();
|
|
|
|
|
+ gControllerDog.setAnimal(new Dog());
|
|
|
|
|
+ gControllerDog.getAnimal().sound();
|
|
|
|
|
+ gControllerDog.getAnimal().run();
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ DogController dogController = new DogController();
|
|
|
|
|
+ GController gController2 = dogController;
|
|
|
|
|
+ //通过父类设置添加,使用的时候会强转
|
|
|
|
|
+ gController2.setAnimal(new Cat());
|
|
|
|
|
+ // 通过子类设置,只能传具体类型
|
|
|
|
|
+ //dogController.setAnimal(new Dog());
|
|
|
|
|
+ dogController.getAnimal().sound();
|
|
|
|
|
+
|
|
|
|
|
+ DogController2 dogController2 = new DogController2();
|
|
|
|
|
+ GController2 gController3 = dogController2;
|
|
|
|
|
+ gController3.setAnimal(new Dog());
|
|
|
|
|
+ dogController2.getAnimal().sound();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|