A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄捷 中级黑马   /  2012-6-2 00:37  /  2769 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    多态中instanceof用得多不多啊,主要是运用到哪些地方啊?求实例

6 个回复

倒序浏览
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。
instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
举个例子说:
if(obj instanceof class)
{
}
其返回true情况如下
1.obj是class类的对象
2.obj是class类子类的对象

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 袁錦泰 于 2012-6-2 01:03 编辑

  1.         public boolean equals(Object obj) {
  2.                 if (!(obj instanceof Person)) {//--->复写Object类equals()方法时需要进行判断比较内容是否同一个类的对象
  3.                         throw new RuntimeException("Error");
  4.                 }
  5.                 Person p = (Person) obj;
  6.                 return this.name.equals(p.name) && this.age == p.age;
  7.         }
复制代码
应该用得比较普遍,保证程序的严谨性
在进行对象之间的比较时需要重写Objcet类的equals()方法,保证比较对象的一致性,也就是说保证比较的对象属于同一个类.
多态中,需调用子类特有方法进行向下转型时,也需要判断.
回复 使用道具 举报
A instanceof B
A是一个对象(使用new实例的对象)
B是一个类(不是方法名)
他表示A这个对象是否是B这个类的实例
  1. public interface Base{
  2. public void base();
  3. }
  4. class Child1 implements Base{
  5.           public void base(){}  //实现接口方法
  6.           public void a(){}   //Child1的方法
  7.         }
  8.         class Child2 implements Base{
  9.           public void base(){}  //实现接口方法
  10.           public void b(){}   //Child2的方法
  11.         }
  12. public class Demo{
  13.           public static void main(String[] args){
  14.              
  15.           }
  16.           public static void calc(Base b){
  17.              b.base();   //调用接口方法
  18.               if (b instanceof Child1){
  19.                 ((Child1)b).a();    //为了转型安全,使用intanceof 先判断是不是Child1的对象
  20.               }
  21.              else if (b instanceof Child2){
  22.                 ((Child2)b).b();    //为了转型安全,使用intanceof 先判断是不是Child2的对象
  23.               }
  24.           }
  25. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1 赞一个!

查看全部评分

回复 使用道具 举报
instanceof 一般判是哪个类的引用,
在程序中主要体现在
当多态的时候
向下转型中 会进行一次判断
例如
obj instanceof Student, obj是不是学生类,如果是就进行强转,可以避免类型转换异常,也提高了程序的效率
回复 使用道具 举报
instanceof关键字
      instanceof用于判断某个对象是否是某个类的实例. 例如: a instanceof B 若a是B的实例,则返回true,否则返回的是false.
   instanceof的使用:
      例如下例,一般情况下, 都是在转型之前使用instanceof进行一下判断,这样可以进行比较安全的类型转换.

class A
{
    public void fun1()
    {
        System.out.println("A --> public void fun1()") ;
    }
    public void fun2()
    {
        // fun2方法调用的是fun1方法
        this.fun1() ;
    }
}
class B extends A
{
    // 覆写A类中的fun1()方法
    public void fun1()
    {
        System.out.println("B --> public void fun1()") ;
    }
    public void fun3()
    {
        System.out.println("B --> public void fun3()");
    }
}
class C extends A
{
    // 覆写A类中的fun1()方法
    public void fun1()
    {
        System.out.println("C --> public void fun1()") ;
    }
    public void fun5(){
        System.out.println("C --> public void fun5()");
    }
}
public class Demo03{
    public static void main(String args[])
    {
        fun(new C()) ;
    }
    /* 如果传入的是B类的对象,则要求再调用fun3()方法;
    如果传入的是C类的对象,则要求再调用fun5()方法。
    这样,通过instanceof,实现了判别某个对象到底是谁的实例 */
    public static void fun(A a)
    {
        a.fun2() ;
        //如果a是B的实例化对象,则调用fun3()
        if(a instanceof B)
        {
            B b = (B)a;
            b.fun3() ;
        }
        //如果a是B的实例化对象,则调用fun5()
        if(a instanceof C)
        {
            C c = (C)a ;
            c.fun5() ;
        }
    }
}


评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报

public class MyKey {
                @Override
        public String toString() {
                // TODO Auto-generated method stub
                return name+","+age;
        }
                private String name;
                private int age;
               
                public MyKey(String name,int age){
                        this.name = name;
                        this.age = age;
                }
               
                public boolean equal(Object obj){
                        if(obj instanceof MyKey){  //在复写equal方法时 若object对象不是MyKey类型 也就没有比较的对象了 可提高代码运行效率
                                MyKey myKey = (MyKey) obj;
                                if(name.equals(myKey.name)&&age==myKey.age){
                                        return true;
                                }else{
                                        return false;}
                        }else{
                                return false;
                        }
                }
                public int hasCode(){
                        return name.hashCode()+age;
                }
               
}

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马