java多态性的问题
new返回的是什么值?起始地址?
那么对于java多态性用基类创建子类比如:
class A
{}
class C extends A{}
public class B{A a;
a=new C();//这里a的大小是多大?是class A的大小还是class C的大小呢?
}
------解决方案--------------------关于a的类型,编译器认为a是A类型的,而虚拟机认为a是C类型的,a的真实类型就是虚拟机认为的C类型。只不过作为超类的A可以引用A类型或其子类型的对象。
a仅仅是一个对象变量,它的大小就是一串地址的大小。而a这个对象变量引用了一个C类型的变量。
------解决方案--------------------就是父类引用指向了自己的子类对象,,a是个内存地址值,可以打印看看
------解决方案--------------------首先new关键字返回的是对象的引用,其次new后面一定要跟构造器,如new int[length], new Object()等。
关于引用你就理解为直接引用,就是一个指针,一个变量,指向某个对象。
毫无疑问引用和对象都是有作用域和生命周期的。
引用放在哪里:操作数栈中。
对象放在哪里:java中对象(也成类实例)都放在堆中。关于堆你就理解为JVM提供分配的一块内存空间。
对象有什么,有数据、有功能,就是属性和方法咯。
你这里有个多态的问题如:Parent p = new Sun();这就是父类的引用指向了子类的对象,那么这时候你就可以通过父类的引用来操纵子类的对象了,你可以调用方法、修改数据等。。