| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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();
- }
-
- }
|