继承与多态经典题目注释解析

xiaoxiao2021-02-28  8

public class ABCD{ public static void main(String[] args) { // show(A) show(D) A a1 = new A(); // show(B) 重写show(A) 继承show(D) A a2 = new B(); // B extends A B b = new B(); // 同上 // 继承B的 show(A) show(B) show(D) C c = new C(); // C extends B D d = new D(); // D extends B 同上 // a1本身就是A类,执行A类的方法: // 执行A类的show(A),b被转换为其父类A System.out.println(a1.show(b)); // A and A // 执行A类的show(A),c被转换为其父类B的父类A System.out.println(a1.show(c)); // A and A // 执行A类的show(D),无转换优先 System.out.println(a1.show(d)); // A and D // a2定义的是A类,执行A类的方法,被子类重写的才会运行子类的方法: // 应该执行A类的show(A),不过方法被重写所以执行子类show(A) System.out.println(a2.show(a1)); // B and A // 应该执行A类的show(A),不过方法被重写所以执行子类show(A) System.out.println(a2.show(b)); // B and A // 应该执行A类的show(A),不过方法被重写所以执行子类show(A) System.out.println(a2.show(c)); // B and A // 执行A类的show(D) System.out.println(a2.show(d)); // A and D // b定义的是B类,执行B类的方法,继承的方法匹配时执行继承的方法: // 执行B类的show(B),无转换优先 System.out.println(b.show(b)); // B and B // 执行B类的show(B),c被转换为其父类B System.out.println(b.show(c)); // B and B // 执行继承自A类的show(D),无转换优先 System.out.println(b.show(d)); // A and D } } class A { //D是B的子类,最小,只有传入D才会运行 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(A obj) { return ("B and A"); } public String show(B obj) { return ("B and B"); } // 这里没有重写的方法其实继承下来了 // public String show(D obj) { // return ("A and D"); // } } class C extends B { } class D extends B { }
转载请注明原文地址: https://www.6miu.com/read-1150111.html

最新回复(0)