黑马程序员技术交流社区

标题: 技术不牢 这个问题上肯定会出错 [打印本页]

作者: 李慧新    时间: 2013-9-26 10:05
标题: 技术不牢 这个问题上肯定会出错


作者: wrswuxiaoyan    时间: 2013-9-26 10:18
其实多态很简单的,不要把它理解的过难。
每个Java程序的引用变量(你这个里面引用变量就是a),都有编译类型和运行类型。编译就是将 .java文件编译成 .class文件,而运行就是 .class文件在操作系统上运行。
那么,这个时候,就出现多态了,一个类,他在编译时期和运行时期相同的动作却出现了不同的结果。Animal a = new Cat(); 如你的这个,a在编译的时候,只能调用Animal里面的方法和属性,而不能调用Cat的方法和属性。
  要注意的是,这样写Animal a = new Cat(); 后面的Cat必须继承Animal类,为了出现多态,Cat类中必须重写Animal的方法。所谓重写,就是要有和父类Animal中有一模一样的方法。
  编译的时候,a调用的是自己的方法,我们可以预测结果,但是运行的时候,却出现了不同的结果,因为他这个时候调用的是Cat的方法,这就是多态。
  多态呢,很简单,面向对象吗,动物是总类,他又自己特定方法,继承与他的其他动物也有这个特定方法,但是他们方法结果不一样的。
  多态,也仅仅是指类的方法,与属性没有任何关系。
  Animal a = new Cat(); a这个引用变量指向了Cat这个对象。
作者: 张云飞    时间: 2013-9-26 10:33
  1. 99
  2. Type的方法
复制代码
多态的应用记着这样两个特点:
1、在多态中成员方法(非静态)的特点:
        (1)在编译时期:参阅引用型变量所属的类中是否有调用的方法。即看基类中的方法
        (2)运行时期:参阅对象所属的类中是否有调用的方法。即看子类中的方法
        总结:成员方法在多态调用时,编译看左边,运行看右边。

2、在多态中成员变量的特点:(静态方法也一样)
        无论编译还是运行,都参考左边。即参考基类。

作者: 暮雨    时间: 2013-9-26 10:36
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。
编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话。
对不同类的对象发出相同的消息将会有不同的行为。比如,你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说:“开始工作”即可,而不需要对销售人员说:“开始销售工作”,对技术人员说:“开始技术工作”, 因为“员工”是一个抽象的事物, 只要是员工就可以开始工作,他知道这一点就行了。至于每个员工,当然会各司其职,做各自的工作。
多态允许将子类的对象当作父类的对象使用,某父类型的引用指向其子类型的对象,调用的方法是该子类型的方法。这里引用和调用方法的代码编译前就已经决定了,而引用所指向的对象可以在运行期间动态绑定。再举个比较形象的例子:
比如有一个函数是叫某个人来吃饭,函数要求传递的参数是人的对象,可是来了一个美国人,你看到的可能是用刀和叉子在吃饭,而来了一个中国人你看到的可能是用筷子在吃饭,这就体现出了同样是一个方法,可以却产生了不同的形态,这就是多态!
作者: yanglfree    时间: 2013-9-26 11:04
楼上的几位回答得都很好,学习学习
作者: 李慧新    时间: 2013-9-27 09:41
wrswuxiaoyan 发表于 2013-9-26 10:18
其实多态很简单的,不要把它理解的过难。
每个Java程序的引用变量(你这个里面引用变量就是a),都有编译 ...

恩呢 说得对

作者: 李慧新    时间: 2013-9-27 09:42
wrswuxiaoyan 发表于 2013-9-26 10:18
其实多态很简单的,不要把它理解的过难。
每个Java程序的引用变量(你这个里面引用变量就是a),都有编译 ...

嗯  多谢 使我明白的工更透彻了





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2