我有一個類Child
,延伸Parent
。如果父級的實例返回true,那麼instanceof是否會返回true?
Parent child = new Child();
if (child instanceof Parent){
// Do something
}
這是否返回true或false,爲什麼?
我有一個類Child
,延伸Parent
。如果父級的實例返回true,那麼instanceof是否會返回true?
Parent child = new Child();
if (child instanceof Parent){
// Do something
}
這是否返回true或false,爲什麼?
Yes,它會的。爲什麼不呢?
因爲孩子實際上是父母的一個實例。如果你只想爲孩子進行操作,你應該檢查
if (child instanceof Child){
}
然而,你應該從有效的C記住下面的語句++,斯科特邁爾斯:
「任何時候你發現自己寫 形式的代碼「如果對象是 T1類型的,然後做一些事情,但如果 它的類型T2的,然後做一些別的 ,」拍自己。
我認爲這也適用於這種情況。如果你想doSomething根據被引用的對象屬於什麼類型,下面的代碼結構應該幫助你。
注意:我還沒有編譯它。
class Parent {
public void doSomething() {
System.out.println("I am the Parent, and I do as I like");
}
}
class ChildA extends Parent {
public void doSomething() {
System.out.println("I am a child named A, but I have my own ways, different from Parent");
}
}
class ChildB extends Parent {
public void doSomething() {
System.out.println("I am a child named B, but I have my own ways, different from my Parent and my siblings");
}
}
public class Polymorphism101 {
public static void main() {
Parent p = new Parent();
p.doSomething();
p = new ChildA();
p.doSomething();
p = new ChildB();
p.doSomething();
}
}
的instanceof,如果它是一個子類將返回true ...
ofcourse,因爲孩子是家長
是的實例返回true。每當參考(instanceof
表達式的左側)可以投射到ReferenceType(instanceof
表達式的右側的類型)時,instanceof
將爲真。這將是真正的子類在關係到他們的父母:
Child child = new Child();
Parent parent = (Parent) child; //works!
assert child instanceof Parent; //true
從The Java Language Specification, Java SE 9 Edition:
15.20. Relational Operators
...
RelationalExpression的instanceof 引用類型15.20.2. Type Comparison Operator instanceof
...
在運行時,instanceof
操作的結果是true
如果RelationalExpression的值不null
和參考可強制轉換爲引用類型沒有養ClassCastException
。否則結果是false
。
但我確定運行時的對象類型,我需要定義一個父引用來保存所有類型的子對象。我怎麼能以其他方式做到這一點? – ikbal 2011-06-10 09:12:54
@ user479129:您可以在父類型的引用中持有父代的任何子代的引用。也就是說,如果有一個'Parent Parent {}'類和'ChildA extends Parent'和'ChildB extends Parent',那麼您可以使用'Parent p'來引用'ChildA'或'ChildB'類型的對象,但是我別相信你的意思。 – 2011-06-10 09:48:24
我需要控制該對象p是它的子類型,而不是父類型。在某些情況下,它可能是父類型,所以我需要檢查它是否正是我想要的類型。那是我想要的。我希望它清楚 – ikbal 2011-06-10 11:36:38