java多态实现与说明
2016-01-07 13:53
381 查看
1. 背景说明
共有A/B/C/D四个对象,其中B继承A,C和D继承B,其中A包涵eat(A a)和eat(C c),B包涵eat(A a)和eat(B b)。2. 代码片段
public class A { public String eat(A a){ return "A eat A"; } public String eat(C c){ return "A eat C"; } }
public class B extends A{ public void sing(){ } public void cry(){ } public String eat(A a){ return "B eat A"; } public String eat(B b){ return "B eat B"; } public static void main(String[] args){ A a = new A(); A b = new B(); B b1 = new B(); C c = new C(); D d = new D(); System.out.println(a.eat(a)); System.out.println(a.eat(b)); System.out.println(a.eat(c)); System.out.println(a.eat(d)); System.out.println("---------------------"); System.out.println(b.eat(a)); System.out.println(b.eat(b)); System.out.println(b.eat(c)); System.out.println(b.eat(d)); System.out.println("---------------------"); System.out.println(b1.eat(a)); System.out.println(b1.eat(b)); System.out.println(b1.eat(c)); System.out.println(b1.eat(d)); } }
public class C extends B{ }
public class D extends B{ }
执行结果:
----------1 A a = new A()---------- A eat A A eat A A eat C A eat A ----------2 A b = new B()---------- B eat A B eat A A eat C B eat A ----------3 B b1 = new B();---------- B eat A B eat A A eat C B eat B
3. 结果解析
针对 A a = new A()的操作结果,a是一个A类型对象,只有2方法,故其执行eat(a,b,c,d)时,得到结果A eat A
A eat A
A eat C
A eat A
针对 A b = new B()的操作结果,b是一个B类型对象,有2方法,故其执行eat(a,b,c,d)时,得到结果
B eat A
B eat A(因为b.eat(b)时,b对象是A类型的)
A eat C(因为b.eat(c)时,B的父类有该方法,故执行父类方法)
B eat A
针对 B b1 = new B()的操作结果,b1是一个B类型对象,有2方法,故其执行eat(a,b,c,d)时,得到结果
B eat A(因为b1.eat(a)时,b1对象是B类型的,执行其覆盖方法)
B eat A(因为b1.eat(b)时,b1对象是B类型的,b是A类型的,执行其覆盖方法)
A eat C(因为b1.eat(c)时,b1对象是B类型的,执行父类方法)
B eat B(因为b1.eat(d)时,b1对象是B类型的,执行覆盖方法)
4. 多态总结
优先执行子类方法,没有则追溯其父类方法。如果子类父类均无改方法,则追溯其参数对象的父类对象。相关文章推荐
- Mybatis与Spring整合事物
- SpringMVC+JPA+Hibernate配置
- Spring声明式事务管理与配置介绍
- jdk安装
- eclipse 安装svn插件
- Eclipse导入项目No projects are found to import
- struts2请求过程源码分析(转)
- java环境配置
- spring与mybatis,strut2整合连接sqlserver不的不说的那点事儿
- spring3创建RESTFul Web Service
- eclipse 提高开发效率方法
- Struts2动态方法调用(DMI)小问题
- 在使用eclipse 运行 maven install的时候,出现这个错误:Unable to locate the Javac Compiler in:…
- Java获取字符的Unicode编码以及如何过滤特殊字符ZWNJ
- java中length,length(),size()区别
- Java专题 Socket编程之慕课网版本
- java 后台走过的坑
- Eclipse设置背景色
- java怎么连接sql server,需要注意的几点
- java机器学习工具包