java多态和动态绑定
2016-04-11 23:55
337 查看
java的继承使用关键字extends。
例如:class B extends A{…}表示类B继承类A。
java多态存在的三个必要条件:要有继承、要有重写、父类变量引用子类对象。
当使用多态方式调用方法时:
a. 首先检查父类中是否有该方法,如果没有,则编译错误;如果有,则检查子类是否覆盖了该方法。
b. 如果子类覆盖了该方法,就调用子类的方法,否则调用父类方法。
静态绑定(static binding)如果方法的修饰符是private、static、final,或者是构造方法,那么编译器将可以准确地知道应该调用哪个方法,称这种调用方法为静态绑定。
示例代码:
例如:class B extends A{…}表示类B继承类A。
java多态存在的三个必要条件:要有继承、要有重写、父类变量引用子类对象。
当使用多态方式调用方法时:
a. 首先检查父类中是否有该方法,如果没有,则编译错误;如果有,则检查子类是否覆盖了该方法。
b. 如果子类覆盖了该方法,就调用子类的方法,否则调用父类方法。
静态绑定(static binding)如果方法的修饰符是private、static、final,或者是构造方法,那么编译器将可以准确地知道应该调用哪个方法,称这种调用方法为静态绑定。
示例代码:
package j02_polymorphism; public class j02_main_poly { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("j02_main_polymorphism RUN..."); Master me = new Master(); me.feed(new Animal(), new Food()); me.feed(new Cat(), new Fish()); me.feed(new Dog(), new Bone()); } } class Animal{ public void eat(Food f){ System.out.println("一只小动物,正在吃" + f.getFood()); } } class Cat extends Animal{ public void eat(Food f){ System.out.println("cat eat " + f.getFood()); } } class Dog extends Animal{ public void eat(Food f){ System.out.println("Dog eat " + f.getFood()); } } class Food{ public String getFood(){ return "food1"; } } class Fish extends Food{ public String getFood(){ return "fish_food"; } } class Bone extends Food{ public String getFood(){ return "Bone_food"; } } class Master{ public void feed(Animal an, Food f){ an.eat(f); } }
相关文章推荐
- struts2标签又显示不出来
- 责任链模式(java语言实现)
- javaweb基于内容的图片搜索引擎(3)_lire后台使用
- 码农小汪-spring框架学习之7-spring的零配置 @Component @Controller @Service
- Struts2 的基本配置
- Java解析处理JSON
- springMVC
- java中hashCode方法与equals方法的用法
- Java入门 第一季第七章 方法
- Spring transaction propagation
- springmvc 可选的方法返回值解析
- 如何在eclipse中插入断点进行debug调试
- 初探JAVA中I/O流(一)
- Java入门 第一季第六章 数组
- Java反射---getGenericSuperclass和ParameterizedType参数化类型的获取
- Worker那些事儿
- kindeditor使用方法
- Java加载和解析XML文件的两种方法
- java 中日志文件的输出
- MyEclipse打开JSP文件报"Failed to create the part's controls"解决方法汇总