Parametric polymorphism in java with simple example

generics, java, polymorphism

Solution

You need to add an upper bound to `T` such that it implements an interface which guarantees that there is a `talks()` method in the type `T`.

class Pet<T extends Talker>
{
    private T pet;

    public Pet(T pet)
    {
        this.pet = pet;
    }

    public String talks()
    {
        return pet.talks(); // is now defined for type T
    }
}

interface Talker
{
    String talks();
}

Demo, thanks to Ray Toal: http://ideone.com/yiAqM

Problem

I have researched the topic further and i realise that for an example to purely detail parametric polymorphism, it must not utilise "implements" (which would detail subtype polymorphism) but instead should utilise generics . This is my previous question: What is parametric polymorphism in Java (with example)? This is the reworked code to use generics with a single issue. ``` class Pet<T> { private T pet; public Pet(T pet) { this.pet = pet; } public String talks() { // what do i write here? // pet.talks(); is undefined for type T } } class Cat { public String talks() { return "Meow"; } } class Dog { public String talks() { return "Woof"; } } public class TestPet { public static void main(String[] args) { Pet<Cat> cat = new Pet<Cat>(new Cat()); System.out.println("Cat says " + cat.talks()); Pet<Dog> dog = new Pet<Dog>(new Dog()); System.out.println("Dog says " + dog.talks()); } } ``` There is a single issue with my code detailed in comments. I'm unsure how to write it without using the implements command. Do you know what to write?

Original source

Related problems