源于生活
语文课上刘老师给大家讲了一则故事:
一天,猎人上山打猎,走到半山坡上,发现一只野兔撞死在了树桩上面,捡起兔子就回家了;之后猎人就每天守在树桩旁打盹,等着其他的兔子撞死,十天半个月过去了,猎人什么都没带回家;后来他老婆投被隔壁老王去了。
故事讲完了,重点来了,刘老师让大家各自发表一下读后感!
刘老师心里想:猎人他老婆真傻,要另外找也找个远一点嘛,找在隔壁怪尴尬的。
小明读后感:那兔子是不是撒,能自己撞死在树上。
小芳读后感:兔兔这么可爱,怎么可以吃兔兔。
小玉读后感:是谁乱砍伐树木,我要告诉我林业局的局长爸爸。
这里大家都有读后感,刘老师那里的是个标准的,其他学生的各不相同,是不是就是同一问题的多种回答方式啦,简称“多态”。
java中到达以上效果我们可以使用重载,但是重载的问题时学生太多,重置的方式太繁琐了,五十个学生读后感的方法得重载五十次;这个时候就该多态登场了,一次性解决N多学生的读后感发言。
注意
- 多态是方法的多态,不是属性的多态(多态与属性无关)。
- 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
- 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
- 多态的主要优势是提高了代码的可扩展性。
示例
采用多态的思想,只需要创建一个点名方法,刘老师使用点名方法,指定一个具体的人就可以了。
这里的点名方法就实现了多态,可以传入具体的学生也可以传入老师还可以传入人!它一个方法就处理了多种情况。
渣渣代码,大概意思意思,肯定是不够严谨的。
public class Hello {
public static void main(String []args) {
//教室里有一帮人,我们先new出来
Liulaoshi lls = new Liulaoshi();
Xiaoming xm = new Xiaoming();
Xiaohua xh =new Xiaohua();
Xiaoyu xy = new Xiaoyu();
lls.jianggushi(); //刘老师讲故事啦
dianming(xm);//点名 小明回答
dianming(xh);//点名 小花回答
}
public static void dianming(Human r){
r.duhougan();
}
}
class Human{
public void duhougan(){
System.out.println(" 我想静静。");
}
}
class Liulaoshi extends Human{
private String name="刘老师";
public void jianggushi(){
System.out.println("一天,猎人上山打猎,走到半山坡上,发现一只野兔撞死在了树桩上面...");
}
public void duhougan(){
System.out.println(name+"读后感:猎人他老婆真傻,要另外找也找个远一点嘛,找在隔壁怪尴尬的。");
}
}
class Xiaoming extends Human{
private String name="小明";
public void duhougan(){
System.out.println(name+"读后感:那兔子是不是撒,能自己撞死在树上。");
}
}
class Xiaohua extends Human{
private String name="小花";
public void duhougan(){
System.out.println(name+"读后感:兔兔这么可爱,怎么可以吃兔兔。");
}
}
class Xiaoyu extends Human{
private String name="小玉";
public void duhougan(){
System.out.println(name+"读后感:是谁乱砍伐树木,我要告诉我林业局的局长爸爸。");
}
}