今天无意间看到了一篇文章,感觉很棒,贴在这儿。突然意识到,所谓多态,就是一个类的多种形态,如果撒尿也算的话哈哈哈
地址:http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading
The clearest way to express polymorphism is via an abstract base class (or interface)
public abstract class Human{ ... public abstract void goPee(); }
This class is abstract because the goPee()
method is not definable for Humans. It is only definable for the subclasses Male and Female. Also, Human is an abstract concept — You cannot create a human that is neither Male nor Female. It’s got to be one or the other.
So we defer the implementation by using the abstract class.
public class Male extends Human{ ... @Override public void goPee(){ System.out.println("Stand Up"); } }
and
public class Female extends Human{ ... @Override public void goPee(){ System.out.println("Sit Down"); } }
Now we can tell an entire room full of Humans to go pee.
public static void main(String args){ ArrayList<Human> group = new ArrayList<Human>(); group.add(new Male()); group.add(new Female()); // ... add more... // tell the class to take a pee break for (Human person : group) person.goPee(); }
Running this would yield:
Stand Up
Sit Down
...