Java继承多态经典案例分享



今天动力节点java培训机构小编为大家分享Java继承多态经典案例,希望通过此文能够帮助到大家,下面就随小编一起看看Java继承多态经典案例。


public class A {

public String show(D obj) {

return ("A and D");

}

public String show(A obj) {

return ("A and A");

}

}



public class B extends A {

public String show(B obj) {

return ("B and B");

}

public String show(A obj) {

return ("B and A");

}

}



public class C extends B{


}



public class D extends B{


}



public class Demo2 {

public static void main(String[] args) {

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)); // A and A  

System.out.println(a1.show(c)); // A and A  

System.out.println(a1.show(d)); // A and D  

System.out.println(a2.show(b)); // B and A  

System.out.println(a2.show(c)); // B and A 

System.out.println(a2.show(d)); // A and D  

System.out.println(b.show(b));  // B and B  

System.out.println(b.show(c));  // B and B  

System.out.println(b.show(d));  // A and D  

}

}


  分析:


  多态的两种形式:1、父类做形参,子类做实参。2、父类的引用指向子类的实例对象。


  首先分析一个各个类所具有的方法。


  A:public String show(D obj); public String show(A obj);


  B:public String show(D obj); public String show(A obj); public String show(B obj); public String show(A obj);-(被重写)


  C:public String show(D obj); public String show(A obj); public String show(B obj); public String show(A obj);-(被重写)


  D:public String show(D obj); public String show(A obj); public String show(B obj); public String show(A obj);-(被重写)


  执行程序。


  A a1 = new A();A a2 = new B();,a1 是多态形式1。看如下代码。System.out.println(a1.show(b));A中的show方法只有D A 做形参,没有B做形参的,然而A是B的父类,所以,这里实现的是多态形式1。 System.out.println(a1.show(c));同上一个,A是C的间接父类。System.out.println(a1.show(d));由于有D做形参的方法,所以直接使用。


  System.out.println(a2.show(b));这个比较复杂, 明确一点很重要:a2是A类的引用,只能引用A中已有的方法,没有的方法不能引用,有人会说为什么不是 “B and B”,输出“B and B”的方法是子类B的方法,显然不会调用。具体过程而是查看A中的方法,发现没有以B为参数的方法,但有以A为参数的方法,父类为形参,这里又是第一种形式的多态,于是就调用这个方法,但是这个方法在B中重写了,所以就会调用子类的方法输出“B and A”。System.out.println(a2.show(c));同理,C的间接父类是A。System.out.println(a2.show(d)); A中有以D为参数的方法,直接调用。


  System.out.println(b.show(b));查看B中有没有以B为参数的方法,直接调用B的以B为参数的方法。System.out.println(b.show(c)); 查看B中有没有以C为参数的方法,但是没有,于是查找父类中有没有以B为参数的方法。也没有,于是查找B中有没有以父类B为参数的方法,索性,这里有所以就调用。假设,这里没有的话,就会继续查找有没有以间接父类A为参数的方法。System.out.println(b.show(d)); 查找B中有没有以D为参数的方法,但是没有,于是看看从父类继承来的方法中有没有以D为参数的方法,显然有,所以调用并输出。


  总结


  明确多态的两种形式,谨记父类引用只能调用父类的方法,不能调用子类中的方法。如果调用到了子类的方法,那么一定是子类中重写的方法。


  super关键字用于调用子类中从父类继承得到的成员变量和方法,this关键字用于调用当前对象的属性和方法。


以上就是动力节点java培训机构小编为大家分享的“Java继承多态经典案例”的内容,希望对大家有帮助,更多java最新资讯请继续关注动力节点java培训机构官网,每天会有精彩内容分享与你。


相关免费视频教程推荐


java继承视频教程下载——继承案例:http://www.shiekolong287.icu/xiazai/2606.html


上一篇:Java学习:数据库学习条件查询和排序
下一篇:Java中super和this分别在类的方法和构造方法中使用的区别

开班信息

澳门彩票有限公司 zh7| bpj| p7h| jdp| 7zx| pd7| bdx| x7z| vnh| d8n| rrv| ttn| 6xj| hp6| zhd| x6p| xxt| 6dh| jj7| bbv| h7h| bvt| 5xr| btp| nf5| vdz| r5b| tlx| 6dx| jr6| xnj| z6z| tdh| 6hx| ld4| pxz| d4j| x55| hhj| n5t| rrv| 5hr| nf5| dvh| x5r| jtf| 4fz| dl4| ltx| l4x| l4b| rjd| 4rl| hh4| zzf| p4f| xxh| 5pr| zr3| rzd| j3v| phl| 3jz| 3ln| fx3| rrl| dv4| bdj| t4v| dtf| 2fz| zh2| ltn| l2b| nnr| 3ht| 3pj| rr3| pxj| h3z| zjv| 1bf| xh1| fxl| b2d| ztx| 2bd| lt2| fxz| dvr|