您的位置:首页 > 编程语言 > Java开发

java多态的理解

2017-12-07 15:35 169 查看
       多态的定义:指允许不同类的对象对同一消息做出不同的响应。

      
上面的说法可能有点难懂,借用网上一个实例:

比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是
 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

       这样就很好理解了,通俗点讲,同一消息根据对象的不同也会有不同的结果(发送消息就是调用方法)。

      实现多态的方式称为动态绑定,动态绑定指的是程序中定义的引用变量在编码的时候并不确定,而是在程序的运行的时候才确定,引用调用的方法也不确定,也只有在程序运行的时候才能够确定。这样就可以让引用动态绑定到不同的类上。

        多态的实现基础是向上转型,向上转型是指将父类的引用指向子类的对象。

class Father{
int age;
public void teach(){
System.out.println("父亲教儿子");
}
}
class Son extends Father{
int age;
public void learn(){
System.out.println("儿子向父亲学习");
}
}         现在有两个类,一个是Father类,一个是Son类,Son类继承了Father类。
Son son = new Son();//子类的定义
Father father = new Son();//向上转型        下面就是向上转型,这样做有一个非常大的好处,father是父类的引用,当然他可以使用父类所有的方法,也可以使用子类的方法,而且当有多个子类的时候,父类的引用可以随时指向另一个子类。比如说现在有一个Son2类,我们只需要使Father
father = new Son2();这样我们就可以使用Son2中方法了。但是向上转型也有缺点,他会丢失子类特有的方法。
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。

         实现多态的三个必要条件:继承、重写、向上转型。

对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: