黑马程序员技术交流社区
标题:
多态!!!!
[打印本页]
作者:
疯狂程序
时间:
2013-3-23 23:42
标题:
多态!!!!
本帖最后由 疯狂程序 于 2013-3-24 20:20 编辑
都说面向对象 3大特点,封装,继承,多态,我就是不理解多态,能给我详细讲讲吗?最好做个恰当比喻,感激不尽!
作者:
王晓楠
时间:
2013-3-24 00:01
class 动物{
eat(){"吃东西"}
}
猫和狗继承动物这个类,要覆盖eat方法进行各自不同的实现。
class cat extend 动物{
eat(){"吃鱼"}
}
class dog extend 动物{
eat(){"啃骨头"}
}
animal function (){
return 一个任意动物子类对象;
}
动物 animal = function (); animal.eat();你不管返回给我哪个动物,都会各自执行它独有的eat方法。简单说,你只管把子类给我,执行的eat方法是它们自己的。这是多态的好处。
作者:
黑马朱超
时间:
2013-3-24 00:15
本帖最后由 黑马朱超 于 2013-3-24 00:50 编辑
多态就是父类有个动作,他们的子类都会是实现这个动作。但是实现的方式和对象不一样。
比如就拿中国人的中文来说吧。
class 中国人
{
speakChinese()
{说中文}
}
class 东北人 extends 中国人
{
speakChinese()
{东北口音}//俺们那旮旯
}
class 四川人 extends 中国人
{
speakChinese()
{四川口音}//干啥子嘛
}
class 广东人 extends 中国人
{
speakChinese()
{粤语}//我顶你个肺
}
class 上海人 extends 中国人
{
speakChinese()
{上海口音}//侬家就要啦
}
然后你建立对象的时候,直接 中国人 person1 = new 广东人();
class 中国人
{
speakChinese()
{粤语}
}
那么这个person1 就既有个性又有共性了。共性是继承的方法;个性是运用这个方法的方式和子类特有的方法。
父类的引用虽然接收了自己子类的对象。但是父类并不知道这个对象是哪个。虽然说person1说的是粤语,但他并不知道自己是广东人,他只知道自己是中国人。因此如果person1强制认为自己是上海人的话。上海人 p = (上海人)person1;编译会报错。因为person1说粤语,上海人听不懂.因此父类转成子类后,不一定能够调用子类的方法(因为子类选错了);
加强了扩展性
不知道这个比喻是否能够利于你理解
作者:
谷文仁
时间:
2013-3-24 00:48
封装:
定义类CLASS1、CLASS2...封装在同一个包PACKAGE1中
需要引用这些类时,只需要引用PACKAGE1下的所有类就可以,不需要一个一个列出。
继承:
定义类FATHER,FATHER中有方法FUNC1。
定义子类CLASS1继承FATHER,则子类可以继承FUNC1。
用处:当有N个类需要实现同样的内容时,可以将这些重复的内容写到父类中。
多态:
定义类中的方法,可以同时定义FUNC1()、FUNC1(String para1)和FUNC1(Float para1)
当传入参数数目或者类型不同时,会自动调用相应的方法。
作者:
陆旭东
时间:
2013-3-24 14:29
如果说类可以比喻为人的话,那么类中的方法就可以比作人的动作。
多态就好比一个动作的很多种实现形式,比如吃饭这个动作,就有很多种形式,你可以吃中餐、西餐,
再比如睡觉,你可以躺在床上睡,也可以趴在桌子上睡。这些都是一个动作的多种表现形式,希望这样讲你可以听懂!
作者:
曾祥旭
时间:
2013-3-24 15:56
class 毕姥爷{
void 讲课(){
System.out.println("政治");
}
void 钓鱼(){
System.out.println("钓鱼");
}
}
class 毕老师 extends 毕姥爷{
void 讲课(){
System.out.println("JAVA");
}
void 看电影(){
System.out.println("看电影");
}
}
public class Test{
public static void main(String[] args){
毕姥爷 b=new 毕老师();
b.讲课();
b.钓鱼();
毕老师 bi=(毕老师)b;
bi.看电影();
}
}
这是毕老师教学视频中的案例,对于这句语句:毕姥爷 b=new 毕老师();是向上转型,也就相对于毕老师
化妆成毕姥爷(他父亲),这个时候毕姥爷的同事来找毕姥爷来讲课,此时,该同事就会把毕老师当成父亲,然后要求
毕姥爷去讲课,这个时候毕老师虽然化妆成他的父亲,但是他讲课的时候只会讲自己会的,那就是JAVA,此时我们称
之为覆盖操作,这就是多态中成员函数的特点。
此时,如果想要使用毕老师特有的属性功能,那么就要向下转型:毕老师 bi=(毕老师)b;这就相当于毕老师
回家卸妆以后的情况了,卸妆以后,毕老师就可以调用自己的特有方法。
总结:多态向上转型的作用:(1)不能访问子类中的特有方法。如:b不能调用看电影的方法(2)提高了扩展性
如:毕姥爷家的儿子都可以化妆成毕姥爷,便于扩展功能的使用。
多态向下转型的作用:为了使用子类中的特有方法。如:bi可以调用看电影的方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2