课本上面的原话:
1.子类重写父类的方法
2.把父类类型作为参数类型,该父类及其对象作为参数传入
3.运行时,根据实际创建的对象类型动态使用哪个方法
上传的附件里面关于继承的就不要讲了,多和我说说多态
hq.judge(new AccpJava("李明","北京中心"));
hq.judge(new AccpDot("张华","天津中心"));
这两句话new AccpJava怎么理解
首先多态是什么,是数据抽象和继承之后的第三种基本特性。可以有效的将接口和实现分离,也消除了类型之间的耦合性。
通常多态也称作后期绑定、动态绑定和运行时绑定。这个我就不解释了,下面我通过多态的常用特性“向上转型和向下转型”来解释下。
拿你ppt后面的题目来讲解:
乐器(Instrument)分为:钢琴(Piano)、小提琴(Violin)
各种乐器的弹奏( play )方法各不相同。
Instrument是个父类,Piano、Violin分别继承自父类,从而具有父类的所有特性。
public class Piano extends Instrument{
void play(){
system.out.pring("我的Piano");
}
}
public class Violin extends Instrument{
void play(){
system.out.pring("我的Violin");
}
}
public class Music{
public static void tune(Instrument i){
i.play();
}
public static void main(String[] args){
Piano piano =new Piano ();
Violin violin =new Violin ();
tune(piano );//向上转型用父类作为参数接受
tune(violin );)//向上转型用父类作为参数接受
}
}
//从上面可以看出实现了多态,两个子类实例化后调用tune方法不需要明确指定实例化类的类型,而是指定了父类,由父类向上转型调用play方法。调用tune方法虚拟机会实现动态绑定。
关于多态,网上有很多啊,楼主可以查查
要理解你那两句话其实也不难! (首先心态要好! :wink: )
你们PPT 上有这样一个方法:
[quote]
public class HQ3 {
public void judge(AccpTeacher t){ // 要求参数是 AccpTeacher 类型
t.giveLesson();
}
[/quote]
然后你调用 judge 方法 的时候 传进去的是 AccpTeacher 类型
这样不就是
“把父类类型作为参数类型,该父类及其对象作为参数传入 ”
这个意思了! 子类可以交给父类嘛! (控制反转 如果你这么说!相信你老师会很happy的)
至于多态那些条条框框的! 现在不好理解就先放下!或者先记住!
以后你们项目多了! 自然就理解了!
实践出真知!!! :wink:
给你举个通俗的例子,比如一个公园今天只对学生开放,就是我公园今天宣称只要是学生都可以来玩。学生有小学生、中学生和大学生等等,反正都是学生,都可以去这个公园的,但是收费又不一样,来个小学生10元,中学生20元,大学生30元,那怎么知道是什么学生来的呢,这就要看公园大门的人界定了,学生来的时候(运行时)一看小学生,好10元,一看大学生,ok,30元。
上面的小学生、中学生、大学生就是学生的几种形态。
公园只对学生开放,就是介绍参数为学生。
公园的看门人就是类加载器。
在学生来的时候就是运行时,能判断来的是什么学生。
建议看一下 Think in java的第八章多态,说的很详细,也很深入!
这个也就是动态绑定,也叫运行时绑定,我们把父类或接口做为函数的参数, 那么我们就可以把这个父类或这个接口的子类或实现类传给这个函数,至于我们为什么这么写,主要是为了实现后期的可扩展性,同时设计模式上,也要求我们面向接口编程。