Java多态性向下转换

时间:2016-02-15 16:32:11

标签: java

我一直很难理解我确信非常简单的东西,但我是java的新手,所以我问你们:

public class A
{

    public int num;

    /**
     * Constructor for objects of class A
     */
    public A(){
        num = 222;
    }
    public A(int n){
        num = n;
    }

    public int getNum(){
        return num;
    }
    public boolean f(A a){
        return num == a.num*2;
    }
}



public class B extends A
{

    public int num;


    public B(int n)
    {
        num = n;
    }

    public boolean f(B b){
        return num == b.num;
    }
}



public class Tester
{
    public static void main(String[]args){
        A a = new B(14);
        System.out.print(a.num);

    }
}

这个输出是:222。

我的问题是为什么222而不是14? 我确实将构造函数放在B中,获取了int,并将int(14)放在b构造函数中。那么为什么我得到的结果好像我用空A承包商? 任何人都可以解释一下这个逻辑吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

因为您有两个变量num,并且当您将对象向上转换为A时,您正在使用A类中仅包含默认值的变量