题目:根据题目,写出自己的答案
/**
* 多态练习
* @author
*
*/
public class MoreModule {
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("1--" + a1.show(b));
System.out.println("2--" + a1.show(c));
System.out.println("3--" + a1.show(d));
System.out.println("4--" + a2.show(b));
System.out.println("5--" + a2.show(c));
System.out.println("6--" + a2.show(d));
System.out.println("7--" + b.show(b));
System.out.println("8--" + b.show(c));
System.out.println("9--" + b.show(d));
}
}
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 {}
解析过程代码:
/**
* 多态:相同的方法,不同的对象作用会有不同的结果,在编程中即是不同的运行结果
* 多态练习
* @author
*
*/
public class MoreModule {
public static void main(String[] args) {
//一切解析针对此例子,如果改变继承关系,得重新解析
//声明A的变量,A的实例,a1只能调用A的方法
A a1 = new A();
//声明A的变量,B的实例,如果B中重写了A的方法,则调用B的方法,如果没有重写,则调用A的方法
A a2 = new B();//向上转型
//声明B的变量,B的实例,可以调用B中的一切方法,如果并且可以调用父类的没有重写的方法
B b = new B();
C c = new C();
D d = new D();
//三个show全是调用A类的方法
System.out.println("1--" + a1.show(b));
System.out.println("2--" + a1.show(c));
System.out.println("3--" + a1.show(d));
//向上转型后,调用父类方法,但是,如果子类重写了父类方法,调用的是子类的方法。前面两个show调用了B类方法,后面show调用了A类方法
System.out.println("4--" + a2.show(b));
System.out.println("5--" + a2.show(c));
System.out.println("6--" + a2.show(d));
//前面两个show调用本类B的方法,后面调用A类的方法
System.out.println("7--" + b.show(b));
System.out.println("8--" + b.show(c));
System.out.println("9--" + b.show(d));
}
}
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 {}
题目答案: