Cao Yi

I’m not me? —— 多态的另一个例子

Index

按:我感觉我出了一个还不错的面试题~

代码如下:

SuperClass.java

public class SuperClass {
    int a = 3;

    public int getA() {
        return a;
    }
}

SubClass.java

public class SubClass extends SuperClass{
    int a = 4;

    @Override
    public int getA() {
        return a;
    }
}

Client.java

public class Client {
    public static void main(String[] args) {
        SuperClass s = new SubClass(); //!!! s 的编译时类型是 SuperClass, 运行时类型是 SubClass
        System.out.println(s.a); // 3
        System.out.println(s.getA()); // 4
        System.out.println(s.a != s.getA()); // true
    }
}

Client 的几个输出语句的输出结果写在代码注释中了。其中,需要特别注意的是: s.a != s.getA()true! 这个初看有点让人不解,s.a 怎么会不等于自身?(I’m not me?) 出现这个情况,正是 多态(Polymorphism) 的限定所决定的:

PS: 刚刚写了个多态的例子,想了下,觉得比较麻烦,罗嗦,就改了一个简化版如上。


这篇文章最初于2018.11.25 15:56发布在OSC上 history on OSC