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

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 {
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值