|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-12
引用 我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。 我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊? 退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解? 类的初始化和实例化是两码事。任何类在使用前都会经过装载-->连接-->初始化三个过程。 类的构造方法不能当成普通的方法,应当看成类似于static的方法 |
|
| 返回顶楼 | |
|
时间:2008-04-12
foy 写道 引用 我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。 我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊? 退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解? 类的初始化和实例化是两码事。任何类在使用前都会经过装载-->连接-->初始化三个过程。 类的构造方法不能当成普通的方法,应当看成类似于static的方法 foy,类的初始化和实例化是两码事,就不讨论了。 我的观点是反对“父类根本就没有在堆内存空间中”。 |
|
| 返回顶楼 | |
|
时间:2008-04-12
mfcai 写道 foy 写道 引用 我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。 我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊? 退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解? 类的初始化和实例化是两码事。任何类在使用前都会经过装载-->连接-->初始化三个过程。 类的构造方法不能当成普通的方法,应当看成类似于static的方法 foy,类的初始化和实例化是两码事,就不讨论了。 我的观点是反对“父类根本就没有在堆内存空间中”。 我觉得“父类根本就没有在堆内存空间中”这话是没有错的。 |
|
| 返回顶楼 | |
|
时间:2008-04-13
其实这个问题是不是可以从Java初始化的顺序上来给出一个解释呢!?
其顺序如下: 1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行 3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行 4. 父类构造方法 5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行 6. 子类构造方法 如此不就很明了了吗? 父类的实例成员在子类的实例成员初始化前已经初始化好了,打印出来的当然就是父类中定义的1了吧! 不知理解是否正确?! 还请各位酌定! |
|
| 返回顶楼 | |
|
时间:2008-04-13
我觉得
抽象的父类给我感觉就是其子类的参照 JVM在初始化子类前会先初始化父类中的成员,调用构造函数但而并非实例化父类 父类根本就没有在堆内存空间中,而他里面的成员是被先初始化到堆内存空间中 |
|
| 返回顶楼 | |
|
时间:2008-04-14
我忽然想到另外一个问题
如果我要使用父类中的方法而要使用子类中的变量 可以吗? 我要用就是想让楼主题目中用父类函数打印出子类中的i可以吗? |
|
| 返回顶楼 | |
|
时间:2008-04-15
foy 写道 mfcai 写道 foy 写道 引用 我觉得你这句话“抽象类,和类的差别就是,不可以有实体。“有待商榷。
你这句话要表达的意思应该是这样理解:abstract类不能创建对象,必须由其子类来创建对象。 我觉得这里应该是指用户不能创建abstract类的对象。但没有表明jvm不能初始化abstract类啊? 退一步,如果抽象类在jvm中没有被实例化,那么用户在子类中使用super调用抽象类的方法,怎么理解? 类的初始化和实例化是两码事。任何类在使用前都会经过装载-->连接-->初始化三个过程。 类的构造方法不能当成普通的方法,应当看成类似于static的方法 foy,类的初始化和实例化是两码事,就不讨论了。 我的观点是反对“父类根本就没有在堆内存空间中”。 我觉得“父类根本就没有在堆内存空间中”这话是没有错的。 1、按照jvm规范,堆是运行时数据区域,类实例化的内存都由类分配,抽象类也是类,为什么抽象类就不在堆空间里呢?那你能告诉我,“父类根本就没有在堆内存空间中”,那父类在哪里实例化的呢? 2、对于你的那句“类的构造方法不能当成普通的方法,应当看成类似于static的方法”,我也不敢苟同.恕我愚钝,实在是不能明白为什么要和构造方法看成是static的方法??? static方法是类在装载的过程中,JVM会调用内置的<clinit>方法对其进行初始化调用。而构造方法是在对象创建时,JVM会调用内置的<init>方法来调用它。 |
|
| 返回顶楼 | |






