专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java继承多态经典案例分享

Java继承多态经典案例分享

更新时间:2019-09-17 11:38:09 来源:动力节点 浏览2920次


今天动力节点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.bjpowernode.com/xiazai/2606.html


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>