소스 검색

初始化

詹子聪 5 년 전
커밋
723fd11d66

+ 6 - 0
ExtendTest/.classpath

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

+ 17 - 0
ExtendTest/.project

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>ExtendTest</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

+ 5 - 0
ExtendTest/src/com/itant/Animal.java

@@ -0,0 +1,5 @@
+package com.itant;
+
+public abstract class Animal {
+	public abstract void sound();
+}

+ 11 - 0
ExtendTest/src/com/itant/Cat.java

@@ -0,0 +1,11 @@
+package com.itant;
+
+public class Cat extends Animal {
+	public void sound() {
+		System.out.println("miao");
+	}
+	
+	public void run() {
+		System.out.println("5m/s");
+	}
+}

+ 11 - 0
ExtendTest/src/com/itant/Dog.java

@@ -0,0 +1,11 @@
+package com.itant;
+
+public class Dog extends Animal {
+	public void sound() {
+		System.out.println("wang");
+	}
+	
+	public void run() {
+		System.out.println("10m/s");
+	}
+}

+ 52 - 0
ExtendTest/src/com/itant/Test.java

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

+ 16 - 0
ExtendTest/src/com/itant/extend/Controller.java

@@ -0,0 +1,16 @@
+package com.itant.extend;
+
+import java.util.List;
+
+import com.itant.Animal;
+public class Controller {
+	private Animal animal;
+	
+	public void setAnimal(Animal animal) {
+		this.animal = animal;
+	}
+	
+	public Animal getAnimal() {
+		return animal;
+	}
+}

+ 7 - 0
ExtendTest/src/com/itant/gen/DogController.java

@@ -0,0 +1,7 @@
+package com.itant.gen;
+
+import com.itant.Dog;
+
+public class DogController extends GController<Dog> {
+
+}

+ 7 - 0
ExtendTest/src/com/itant/gen/DogController2.java

@@ -0,0 +1,7 @@
+package com.itant.gen;
+
+import com.itant.Dog;
+
+public class DogController2 extends GController2<Dog> {
+
+}

+ 15 - 0
ExtendTest/src/com/itant/gen/GController.java

@@ -0,0 +1,15 @@
+package com.itant.gen;
+
+import java.util.List;
+
+public class GController<T> {
+	private T animal;
+	
+	public void setAnimal(T animal) {
+		this.animal = animal;
+	}
+	
+	public T getAnimal() {
+		return animal;
+	}
+}

+ 17 - 0
ExtendTest/src/com/itant/gen/GController2.java

@@ -0,0 +1,17 @@
+package com.itant.gen;
+
+import java.util.List;
+
+import com.itant.Animal;
+
+public class GController2<T extends Animal> {
+	private T animal;
+	
+	public void setAnimal(T animal) {
+		this.animal = animal;
+	}
+	
+	public T getAnimal() {
+		return animal;
+	}
+}