B类继承A.
创建对象   A a=new B();   请问此对象时A的还是B的?

解决方案 »

  1.   

    我认为此对象是A的,你可以试一下,如果A和B中有相同的属性,它还是会先去A中查找的,不过这个对象所指向的实例是B的,这就是那个上转型或者说多态机制:父类的对象指向子类的实例。
    如果我说错啦,请各位高人指正啊
      

  2.   

    A B 都是。因为B 是 A 的子类。严格意义上是A ,原因很简单A a = new B();
    //相当于
    A a; // a 是 A 的对象
    a = new B(); // 用 A的子类 B构造
      

  3.   

    class A { private String attr; public A() {
    setAttr("[Class:A]");
    } public String getAttr() {
    return attr;
    } public void setAttr(String attr) {
    this.attr = attr;
    }
    }class B extends A {
    public B() {
    setAttr("[Class:B]");
    }
    }public class AB { public static void main(String[] args) { A a = new B();
    System.out.println(a.getAttr());
    // 输出 :[Class:B] 说明 是 B 构造的
    System.out.println(a instanceof A);
    // 输出 :true 说明 a 是 B 的对象
    System.out.println(a instanceof B);
    // 输出 :true 说明 a 是 B 的对象
    }}
      

  4.   

    编译时肯定是按A对待的,运行时是按B对待的。至于说,先查找A中的属性,是因为属性这个东西是没有多态的概念的。验证的方法很简单,运行的时候用getClass方法返回类型,判断是否和B.class相等就可以了