1. 程式人生 > >管理與java的【JAVA---instanceof的用法】

管理與java的【JAVA---instanceof的用法】

instanceof表示式: A instanceof B;(一般A為引用變數;B為類或者是介面,返回值為true或者false);
理解為:判斷A是否是B這個類或者是B子類或者是實現B類(介面)的類的例項物件。也就是說這個函式的作用大致可以分為三種情況:
(1)
判斷A是否是B這個類的例項物件
Code:
class test
{}
Test a=new Test();
System.out.println(a instanceof Test);返回值為true;(因為a是Test類的例項物件)
(2) 判斷A是否是B這個類的子類的例項物件
Code:
class Test
{}
class SubTest extends Test
{}
SubTest a=new SubTest();
System.out.println(a instanceof Test);返回值為true;(因為a是Test子類的例項物件)
System.out.println(a instanceof SubTest);返回值為true;(因為a是SubTest類的例項物件)
(3)

判斷A是否是B這個類(介面)的例項物件
Code:
class mListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
}
}
上述定義了一個類實現了ActionListener介面
System.out.println((new mListener()) instanceof ActionListener);返回值為true;
System.out.println((new mListener()) instanceof MouseListener);返回值為false;
附:
在類的繼承的過程中有這樣一種情況比較特殊,Code如下:
class Test
{
void in()
{
System.out.println(‘in’);
}
}
class SubTest extends Test
{
void out()
{
System.out.println(‘out’);
}
}
Test a=new SubTest(); //在編譯的時候a表現的是Test引用變數,但在執行時表現的是 SubTest性質,因此在編譯的時候不能呼叫SubTest中的函式,必須轉化為SubTest型別。其實質就是SubTest這個類的例項變數。
a.in
();//編譯正確
a.out();//編譯錯誤
((SubTest)a).out();//編譯正確
為了防止出錯 我們一般採用下面的表示式
if(a instanceof SubTest())
{
((SubTest)a).out();
}
System.out.println(a instanceof Test);返回值為true;(因為a是Test子類的例項物件)
System.out.println(a instanceof SubTest);返回值為true;(因為a是SubTest類的例項物件)