[英]How does casting work in this situation?
假設我有兩節課。
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;
}
}
現在,如果我繼續將cast2轉換為example 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()將返回什么? 這里會發生什么,更重要的是為什么會發生?
a.getA()將返回什么?
將執行example2的getA()方法,即10。
即使在第二種情況下,它也會返回10。
原因是方法覆蓋
它在運行時決定,哪個getA()方法被調用。
由於您正在創建Example2的對象,因此在兩種情況下都將調用Example2的getA(),它會覆蓋Example1的getA()方法。
您可以將Example2的對象強制轉換為Example1,因為它是父類,但不會改變該對象實際上是Example2的事實。
a.getA()將返回什么?
將為您提供example2
的結果,因為您是使用class example2
實例化的
這里發生什么
example1 a = (example1) new example2(5, "Hi");
。 您正在創建類型為example1
的實例,其中實例為實現example2
。 並轉換為example1
。
投射顯示使用一種類型的object
代替另一種類型的object
。 而已。 它不會神奇地將實例化的對象轉換為強制轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.