今天深圳达内教育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