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培训机构官网,每天会有精彩内容分享与你。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值