我写如下代码~~
class A{
public void f(){
System.out.println("A");
}
};
class B extends A{
public void f(){
System.out.println("B");
}
};
class Test11{
public static void main(String[] args)
{
A a = new B();
//我的问题在这里~
a.f();
}
}输出是:B...我想知道如果把A a = new B();改成B a = new B();会有什么不同?~~输出同样是B....那这其中具体的内存是怎样划分的~引用是怎样引用的呢?~~新手问题~帮帮忙谢谢!~
class A{
public void f(){
System.out.println("A");
}
};
class B extends A{
public void f(){
System.out.println("B");
}
};
class Test11{
public static void main(String[] args)
{
A a = new B();
//我的问题在这里~
a.f();
}
}输出是:B...我想知道如果把A a = new B();改成B a = new B();会有什么不同?~~输出同样是B....那这其中具体的内存是怎样划分的~引用是怎样引用的呢?~~新手问题~帮帮忙谢谢!~
对于 A a = new B(); 这句语句可以拆分为2句:
A a; //声明一个引用变量a,用于指向类A或类A子类的实例对象,
//对该实例成员方法或成员变量的操作依靠引用变量a来完成.
a = new B(); //实例化类B的对象,并将该对象的在堆内存的首地址赋值给引用变量a楼主所说的A a = new B();和B a = new B();的不同在于用于对类B操作的引用变量a的权限范围不同,前一句a可以指向类B和类A的实例对象(前提为类B是类A的子类),后一句a只能指向类B及类B的子类的实例对象,但是2句话都可以完整的实现对类B实例对象的所有操作以上是我所理解的,仅供楼主参考