Skip to content

Instantly share code, notes, and snippets.

@canujohann
Last active August 29, 2015 14:02
Show Gist options
  • Save canujohann/e48f0f5b236d3e22b097 to your computer and use it in GitHub Desktop.
Save canujohann/e48f0f5b236d3e22b097 to your computer and use it in GitHub Desktop.
Generics in java
public class MainClass {

	public static void main(String args[]) {

		Holder<Duck> myDuck = new Holder<Duck>(new Duck());
		myDuck.behaviour();

		Holder<Dog> myDog = new Holder<Dog>(new Dog());
		myDog.behaviour();
		
		//定義する時にまだクラスを分からない場合
		Holder<?> mySpecialAnimal ;
		mySpecialAnimal = new Holder<Duck>(new Duck());

	}

}

//注意: animalはinterfaceなのに、extendsを利用
//interfaceじゃなくてclassでもいけますよ!
class Holder<T extends Animal> {

	private T myAnimal;
	
	//constructor
	public Holder(T animal){
		this.myAnimal=animal;
	}

	//食べる+飲む
	public void behaviour() {
		myAnimal.drink();
		myAnimal.eat();
	}

}

interface Animal {
	public void eat();
	public void drink();
}

class Duck implements Animal {
	public void eat() {
		System.out.println("食べた!(duck)");
	}
	public void drink() {
		System.out.println("飲んだ!(duck)");
	}
}

class Dog implements Animal {
	public void drink() {
		System.out.println("飲んだ!(dog)");
	}
	public void eat() {
		System.out.println("食べた!(dog)");
	}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment