注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

创新改变世界

you changed the world

 
 
 

日志

 
 

instanceof关键字  

2013-05-03 14:10:07|  分类: java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在java中可以使用instanceof关键字判断一个对象到底是那个类的实例,格式如下:

对象  instanceof  类->返回boolean类型

范例:

package InstanceofDemo;
 
class A {
    public void fun1() {
        System.out.println("A-->fun1");
    }
 
    public void fun2() {
        this.fun1();
    }
}
 
class B extends A {
    public void fun1() {
        System.out.println("B-->fun1");
    }
 
    public void fun3() {
        System.out.println("B-->fun3");
    }
}
 
public class InstanceofDemo01 {
    public static void main(String[] args) {
        A a1 = new B(); // 向上转型实例化A类对象
        System.out.println("A a1=new B():" + (a1 instanceof A));
        System.out.println("A a1=new B():" + (a1 instanceof B));
 
         B b1=(B)a1; //向下转型实例化A类对象
         System.out.println("A a1=new B():"+(a1 instanceof A));
         System.out.println("A a1=new B():"+(a1 instanceof B));
 
        A a2 = new A();// 通过A类的构造实例化本类对象
        System.out.println("A a2=new B():" + (a2 instanceof A));
        System.out.println("A a2=new B():" + (a2 instanceof B));
    }
}
//由于通过子类实例化的对象同时是子类和父类的实例,所以可以直接进行向上或者相信转型,但如果直接使用了父类的实例化对象,则一定就不在是子类实例化
//所以是不能转型的

  结果:

A a1=new B():true
A a1=new B():true
A a1=new B():true
A a1=new B():true
A a2=new B():true
A a2=new B():false

范例:在向下转型钱进行验证

package test;
 
class A {
    public void fun1() {
        System.out.println("A-->public void fun1(){}");
    }
 
    public void fun2() {
        this.fun1();
    }
}
 
class B extends A {
    public void fun1() {
        System.out.println("B-->public void fun1(){}");
    }
 
    public void fun3() {
        System.out.println("B-->public void fun3");
    }
}
 
class C extends A {
    public void fun1() {
        System.out.println("C-->public void fun1(){}");
    }
 
    public void fun5() {
        System.out.println("C--->public void fun3(){}");
    }
}
 
public class InstanceDemo02 {
    public static void main(String[] args) {
        fun(new B());//传递b类实例,产生向上转型
        fun(new C());//传递C类实例,产生向上转型
    }
 
    public static void fun(A a) {//此方法可以分别调用各自子类单独定义的方法
        a.fun1();
        if (a instanceof B) {//判断是否是B类实例
            B b = (B) a;//进行向下转型
            b.fun3();//调用子类自己定义的方法
        }
        if (a instanceof C) {//判断是否是C类实例
            C c = (C) a;//进行向下
            c.fun5();
        }
    }
}

  结果:

B-->public void fun1(){}
B-->public void fun3
C-->public void fun1(){}
C--->public void fun3(){}

在上面的fun()方法中因为要调用各个子类自己的方法,所以必须进行对象的向下转型,但是为了保证程序在运行时不出现类转换异常,所以在发生向下转型前要使用instanceof关键字判断是那个子类的实例,以保证程序正常运行。

***********

在类的设计中重点在于父类的设计,而且在类的设计中,永远不要去继承一个已经实现好的类,只能继承抽象类或实现接口,因为一旦发生对象的向上转型后,所调用的方法一定是被子类所覆写过的方法。

  评论这张
 
阅读(71)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017