class AClass
{
public void f(int a)
{
      System.out.println("AClass "+ a);
}
}
class BClass extends AClass   //继承AClass类{

public void f( int a)
{
System.out.println("BClass"+a);
}
}
class WhatKind 
{
public static void main(String[] args) 
{

AClass db1=new BClass();//这句话什么意思?

db1.f(2);


}
}请问:
AClass db1=new BClass();这句话的db1是哪个类的对象
我运行了一下,db1调用的是BClass类的方法f.但为什么声明的是AClass呢

解决方案 »

  1.   

    代码不能加颜色哦,郁闷。
    看代码的时候把AClass db1=new BClass();//这句话什么意思?
    当成AClass db1=new BClass();
      

  2.   

    http://topic.csdn.net/u/20081105/14/d136ddfa-c285-4948-8001-a1405bbec649.html
    这种问题回答了N遍了
      

  3.   

    BClass继承自AClass,所以
    AClass的引用可以指向BClass的对象
    多态的一种
    也就是说BClass的对象可以当作AClass的对象来用
      

  4.   

    这就是动态绑定了.当满足一下三个条件:
    1.有类被继承
    2.类的方法有被重载
    3.子类指向父类的引用.
    就构成了多态的动态绑定.在这种情况下,db1的具体类容要根据他实际指向的内容在编译的时候才能确定.所以叫动态绑定.有一点要注意的就是,如果方法没有被重载,那么db1只能调用classA的内容,classB中定义的方法将被屏蔽(upcasting)
      

  5.   

    AClass db1=new BClass(),db1是AClass声明,然后是把新建的子类对象引用给父类的声明变量db1,就是这样吧!
      

  6.   

     父类引用指向子类对象...引用是父类AClass,但生成对象是子类BClass欢迎加入 JAVA交流群 72923840