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呢
{
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呢
看代码的时候把AClass db1=new BClass();//这句话什么意思?
当成AClass db1=new BClass();
这种问题回答了N遍了
AClass的引用可以指向BClass的对象
多态的一种
也就是说BClass的对象可以当作AClass的对象来用
1.有类被继承
2.类的方法有被重载
3.子类指向父类的引用.
就构成了多态的动态绑定.在这种情况下,db1的具体类容要根据他实际指向的内容在编译的时候才能确定.所以叫动态绑定.有一点要注意的就是,如果方法没有被重载,那么db1只能调用classA的内容,classB中定义的方法将被屏蔽(upcasting)