Java:instanceof演算子のメモ
Javaのinstanceofのメモ
class C {} class D extends C{} interface E {} class F implements E{} class G extends F{} public class Sample { public static void main(String[] args) { C c = new C(); System.out.println("c instanceof C:" + (c instanceof C)); //c instanceof C:true System.out.println("c instanceof D:"+ (c instanceof D)); //c instanceof D:false System.out.println("c instanceof E:"+ (c instanceof E)); //c instanceof E:false System.out.println("c instanceof F:compile error"); System.out.println("c instanceof G:compile error"); D d = new D(); System.out.println("d instanceof C:" + (d instanceof C)); //d instanceof C:true System.out.println("d instanceof D:" + (d instanceof D)); //d instanceof D:true System.out.println("d instanceof E:" + (d instanceof E)); //d instanceof E:false System.out.println("d instanceof F:compile error"); System.out.println("d instanceof G:compile error"); E ef = new F(); System.out.println("ef instanceof C:" + (ef instanceof C)); //ef instanceof C:false System.out.println("ef instanceof D:" + (ef instanceof D)); //ef instanceof D:false System.out.println("ef instanceof E:" + (ef instanceof E)); //ef instanceof E:true System.out.println("ef instanceof F:" + (ef instanceof F)); //ef instanceof F:true System.out.println("ef instanceof G:" + (ef instanceof G)); //ef instanceof G:false E eg = new G(); System.out.println("eg instanceof C:" + (eg instanceof C)); //eg instanceof C:false System.out.println("eg instanceof D:" + (eg instanceof D)); //eg instanceof D:false System.out.println("eg instanceof E:" + (eg instanceof E)); //eg instanceof E:true System.out.println("eg instanceof F:" + (eg instanceof F)); //eg instanceof F:true System.out.println("eg instanceof G:" + (eg instanceof G)); //eg instanceof G:true F f = new F(); System.out.println("f instanceof C:compile error"); System.out.println("f instanceof D:compile error"); System.out.println("f instanceof E:" + (f instanceof E)); //f instanceof E:true System.out.println("f instanceof F:" + (f instanceof F)); //f instanceof F:true System.out.println("f instanceof G:" + (f instanceof G)); //f instanceof G:false G g = new G(); System.out.println("g instanceof C:compile error"); System.out.println("g instanceof D:compile error"); System.out.println("g instanceof E:"+(g instanceof E)); //g instanceof E:true System.out.println("g instanceof E:"+(g instanceof F)); //g instanceof E:true System.out.println("g instanceof E:"+(g instanceof G)); //g instanceof E:true } }
実行結果
c instanceof C:true c instanceof D:false c instanceof E:false c instanceof F:compile error c instanceof G:compile error d instanceof C:true d instanceof D:true d instanceof E:false d instanceof F:compile error d instanceof G:compile error ef instanceof C:false ef instanceof D:false ef instanceof E:true ef instanceof F:true ef instanceof G:false eg instanceof C:false eg instanceof D:false eg instanceof E:true eg instanceof F:true eg instanceof G:true f instanceof C:compile error f instanceof D:compile error f instanceof E:true f instanceof F:true f instanceof G:false g instanceof C:compile error g instanceof D:compile error g instanceof E:true g instanceof E:true g instanceof E:true
- instanceof演算子はインターフェースを実装しているか、クラスを継承しているかすれば、trueを返却する。
- クラスは継承をしていない・されていないクラスを指定した場合はコンパイルエラーになる。
- インターフェースは実装されていなくてもエラーにはならない。