package com.sf.s5;public class TextInstanceOf {
static class ObjectA{
static String A="Object";
}
static class ObjectB extends ObjectA{
static void showInfo(){
System.out.printf("超类的静态属性%s的值:%s%n","A",A);
}
}
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
ObjectA a=new ObjectA();
ObjectB b=new ObjectB();

//判断A是否是Object类型
if(a.A instanceof Object){
System.out.println("静态属性A是Object类型");
}else{
System.out.println("静态属性A不是Object类型");
}

//判断A是否是String类型
if(a.A instanceof String){
System.out.println("静态属性A是String类型");
}else{
System.out.println("静态属性A不是String类型");
}

//判断null是否是Object类型
if(null instanceof Object){
System.out.println("null是Object类型");
}else{
System.out.println("null不是object类型");
}

//判断对象a是否为ObjectA类型
if(a instanceof ObjectA){
System.out.println("对象a是ObjectA类型");
}else{
System.out.println("对象a不是ObjectA类型");
}

//
if(b instanceof ObjectA){
System.out.println("对象b是ObjectA类型");
}else{
System.out.println("对象b不是ObjectA类型");
}

//
if(a instanceof ObjectB){
System.out.println("对象a是ObjectB类型");
}else{
System.out.println("对象a不是ObjectB类型");
}

//
if(b instanceof ObjectB){
System.out.println("对象b是ObjectB类型");
}else{
System.out.println("对象b不是ObjectB类型");
}
}}

解决方案 »

  1.   

    //判断A是否是Object类型
    if(a.A instanceof Object){
    System.out.println("静态属性A是Object类型");
    }else{
    System.out.println("静态属性A不是Object类型");
    }
    这段程序输出:
    "静态属性A是Object类型". 
    因为a.A是个String对象,String继承自Object. 所以有上面结果。//判断A是否是String类型
    if(a.A instanceof String){
    System.out.println("静态属性A是String类型");
    }else{
    System.out.println("静态属性A不是String类型");
    }
    这段输出:
    “静态属性A是String类型”,应该好理解。因为a.A就是个String对象。//判断null是否是Object类型
    if(null instanceof Object){
    System.out.println("null是Object类型");
    }else{
    System.out.println("null不是object类型");
    }因为任何类的引用都可以赋值 null. 所以null应该不属于任何类(或不是任何类的对象)。//判断对象a是否为ObjectA类型
    if(a instanceof ObjectA){
    System.out.println("对象a是ObjectA类型");
    }else{
    System.out.println("对象a不是ObjectA类型");
    }
    这段程序输出:
    “对象a是ObjectA类型”,这个最好理解。//
    if(b instanceof ObjectA){
    System.out.println("对象b是ObjectA类型");
    }else{
    System.out.println("对象b不是ObjectA类型");
    }
    这段程序输出:
    “对象b是ObjectA类型”,
    因为类ObjectB 继承自类ObjectA. (就象“北京人”一定是“中国人”一样。//
    if(a instanceof ObjectB){
    System.out.println("对象a是ObjectB类型");
    }else{
    System.out.println("对象a不是ObjectB类型");
    }这段程序输出:
    “对象a不是ObjectB类型”,也是最难理解的地方。
    就象上面的,“中国人”不一定是“北京人”。个人理解。
      

  2.   

    static void showInfo(){
    System.out.printf("超类的静态属性%s的值:%s%n","A",A);
    那这个输出的又是什么东东啊!~
      

  3.   

    运行一遍 ,基本就可以理解了,再看看static相关的东西 
      

  4.   


    A继承自父类的静态变量. 输出是: Object.这是在ObjectB类的方法里可以直接用A. 在类外常用类名引用。
    ObjectB.A,或ObjectA.A.