Java多态的理解
2017-06-22 16:02
218 查看
重载和重写
重写:对于同一个class内。同一个方法的名字,参数不同或者返回类型不同
重载:对于子类与父类。
子类重新实现了父类的方法(参数与返回值类型必须相同)
实例化方法:
Parent p = new Child ();
那么p的具体实现是怎么样的,请理解以下内容
![](https://img-blog.csdn.net/20170901121749805?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTgwOTgwNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
问题
答案:
① A and A
② A and A
③ A and D
④ B and A
⑤ B and A
⑥ A and D
⑦ B and B
⑧ B and B
⑨ A and D
还有的注意的地方就是如果在类内 找不到method(Object),会将Object转换成Object的父类再查找是否有对应的方法,即method((super)Object)
所以上面的第4个 a2.show(b) 的执行过程:
1.在可调用的两个方法内没有匹配的。上面例子中的a2可引用到的内容为以下三个方法
2.将参数b转换为b的父类A,即a2.show( (A)b ),这回就有匹配的方法可以调用了
重写:对于同一个class内。同一个方法的名字,参数不同或者返回类型不同
class Parent{ void method(int a){ //todo } void method(int a,int b){ //todo } }
重载:对于子类与父类。
子类重新实现了父类的方法(参数与返回值类型必须相同)
class Parent{ void p1(){}; void p2(){}; Object op1; } class Child extends Parent{ //重写父类的方法 void p1(){}; //子类的独有属性 void c1(){}; Object oc1; }
实例化方法:
Parent p = new Child ();
那么p的具体实现是怎么样的,请理解以下内容
问题
class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A obj)...{ return ("A and A"); } } class B extends A...{ public String show(B obj)...{ return ("B and B"); } public String show(A obj)...{ return ("B and A"); } } class C extends B...{} class D extends B...{} //以下的输出是什么 A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println(a1.show(b)); // ① System.out.println(a1.show(c)); // ② System.out.println(a1.show(d)); // ③ System.out.println(a2.show(b)); // ④ System.out.println(a2.show(c)); // ⑤ System.out.println(a2.show(d)); // ⑥ System.out.println(b.show(b)); // ⑦ System.out.println(b.show(c)); // ⑧ System.out.println(b.show(d)); // ⑨
答案:
① A and A
② A and A
③ A and D
④ B and A
⑤ B and A
⑥ A and D
⑦ B and B
⑧ B and B
⑨ A and D
还有的注意的地方就是如果在类内 找不到method(Object),会将Object转换成Object的父类再查找是否有对应的方法,即method((super)Object)
所以上面的第4个 a2.show(b) 的执行过程:
1.在可调用的两个方法内没有匹配的。上面例子中的a2可引用到的内容为以下三个方法
public String show(A obj)...{ //重写了父类的show(A) return ("B and A"); } public String show(D obj)...{ //继承自父类 return ("A and D"); }
2.将参数b转换为b的父类A,即a2.show( (A)b ),这回就有匹配的方法可以调用了
public String show(A obj)...{ //重写了父类的show(A) return ("B and A"); }
相关文章推荐
- 理解Java多态
- 理解JAVA多态
- JAVA多态的理解
- 如何理解java中重写,重载与多态(整理)
- 深入理解Java的多态
- java多态的理解
- JAVA中几个易混淆关键词的理解:行为,隐藏,组合和继承,覆写和重载,多形(多态)性,动态绑定,上溯造型,抽象类,接口
- JAVA多态的理解
- 对JAVA多态的理解
- 黑马程序员_JAVA基础_多态的理解
- java中对面向对象的三大特征:封装、继承、多态的理解
- 理解java多态的概念和作用
- JAVA中几个易混淆关键词的理解:行为,隐藏,组合和继承,覆写和重载,多形(多态)性,动态绑定,上溯造型,抽象类,接口
- JAVA多态的理解
- 理解JAVA多态,总结整理
- 理解JAVA多态
- JAVA里多态的理解
- 理解JAVA多态
- 我理解java的多态
- 理解java中的多态,多态的例子