所以,让我说我有两节课。
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()会返回什么?
作为另一个问题,如果example2看起来像这样..
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()会返回什么?这里发生了什么,更重要的是为什么会发生?
答案 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.