一个多态相关的面试题
如题,分享一个秋招遇到的有意思的题目:
class A{ static void method1(A a){ System.out.println("aa"); } } class B extends A{ static void method1(A a){ System.out.println("ba"); } static void method1(B a){ System.out.println("bb"); } } class C extends B{ static void method1(A a){ System.out.println("ca"); } } class D extends C{ static void method1(A a){ System.out.println("da"); } } public class Main2 { public static void main(String[] args) { D.method1(new A()); D.method1(new B()); D.method1(new C()); B.method1(new A()); B.method1(new C()); } }
主要就是这个D.method1(new B())的结果没有答对,我的理解是形参B被分析成一个A类,但是在面试后自己尝试时发现,输出结果是bb。
主要原因是由于虽然没有显式的写下来,但是依然有method1(B b)函数被隐式继承了。