在这种情况下,铸造是如何工作的?

时间:2015-08-24 08:34:32

标签: java

所以,让我说我有两节课。

public class example1 {

    private int a;
    private String b;

    public example1(int a, String b) {
        this.a = a;
        this.b = b;
    }

    public int getA() {
        return a;
    }
    public String getB() {
        return b;
    }
} 


public class example2 extends example1 {

    public example2(int a, String b) {
        super(a, b);
    }

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

现在,如果我继续并将example2转换为类型示例1。

example1 a = (example1) new example2(5, "Hi");

a.getA()会返回什么?

作为另一个问题,如果exam​​ple2看起来像这样..

public class example2 extends example1 {

    public example2(int a, String b) {
        super(a, b);
    }
    @Override
    public int getA() {
        return getAModified();
    }
    public int getAModified() {
        return 10;
    }
}

a.getA()会返回什么?这里发生了什么,更重要的是为什么会发生?

2 个答案:

答案 0 :(得分:0)

  

a.getA()会返回什么?

将执行example2的getA()方法,即10。

即使在第二种情况下,也会返回10.

  

这里的原因是方法重写

它在运行时决定,getA()方法被调用 由于您正在创建Example2的对象,因此在两种情况下都会调用Example2的getA(),它会覆盖Example1的getA()方法。

您可以将Example2的对象强制转换为Example1,因为它是父类,但它不会更改对象实际上是Example2的事实。

答案 1 :(得分:0)

What would a.getA() return?

Will give you the result from example2, since your instantiated using the class example2

What happens here

example1 a = (example1) new example2(5, "Hi");

. You are creating an instance of type example1 witn of implementation example2. And casting to example1.

Casting shows the use of an object of one type in place of another type. That's it. It won't magically convert the instantiated object to casted.