Java中的继承简单说明

0 java inheritance

所以,我有这个:

public class A {

    public int a = 0;
    public void m(){
        System.out.println("A"+a);
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个:

public class B extends A {

    public int a = 5 ;
    public void m (){
        System.out.println("B"+a);
    }
    public static void main(String[] args) {
        A oa = new A();
        B ob = new B();
        A oab = ob;
        oa.m();
        ob.m();
        oab.m();

        System.out.println("AA"+oa.a);
        System.out.println("BB"+ob.a);
        System.out.println("AB"+oab.a);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

A0
B5
B5
AA0
BB5
AB0
Run Code Online (Sandbox Code Playgroud)

我不明白为什么oab.m(); 输出是B5而不是A0.谁可以给我解释一下这个?

JB *_*zet 9

这就是多态性的全部要点.具体类型oabB(因为对象是用它创建的new B()).所以B.m()调用该方法.

查看http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29中的Animal示例,了解它为何有用.当你有一只动物,而这只动物是一只猫时,你会期待它说"喵!" 当你说话的时候.