A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牧风 中级黑马   /  2016-7-26 22:42  /  1293 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

都说JAVA中抽象类不能创建对象,我觉得是不能创建显式对象。并不是说的不能创建对象。例如一个抽象类public abstract class A{
   private  int a =2;
   public abstract void show();
}
class B extends A{
    public  void show(){
         System.out.println("能创建对象")
     }
}
虽然不能 通过 new abstract A(); 来创建对象, 但是当B继承A 创建B的对象的时候JVM 会自动创建A的对象 因为B要继承 A的方法 get set
你觉得呢?

14 个回复

倒序浏览
并没有A没有对象而是引用.

点评

他在JVM中是引用???JVM 不是创建A的对象B 才能创建对象吗?? B创建对象时JVM创建的是A的引用?  发表于 2016-7-26 23:14
回复 使用道具 举报
itismyhao 发表于 2016-7-26 22:58
并没有A没有对象而是引用.

他在JVM中是引用???JVM 不是创建A的对象B 才能创建对象吗?? B创建对象时JVM创建的是A的引用?
回复 使用道具 举报
是不是虚拟内部类?
回复 使用道具 举报
牧风 发表于 2016-7-26 23:13
他在JVM中是引用???JVM 不是创建A的对象B 才能创建对象吗?? B创建对象时JVM创建的是A的引用? ...

抱歉.我又去查了一下,super与this不一样,它不是一个对象的引用,只是一个提示编译器调用父类方法的特有关键字.而继承关系只是对应类,并不对应对象.所以创建子类对象,并不会创建父类对象.
其实你大可不必这样钻牛角尖,真要钻牛角尖看看源码
回复 使用道具 举报
我认为A并没有创建对象,只是它的子类创建对象,就好像儿子会敲代码,而父亲不会敲一样,这个事各自算各自的。
回复 使用道具 举报
A的对象应该在B中,super调用
回复 使用道具 举报
A的对象应该在B中,super调用
回复 使用道具 举报
谁说继承就得要创建对象以后才能继承?只要有这个class文件就行了啊。
回复 使用道具 举报
A中好像没有get  set  方法吧
回复 使用道具 举报
我记得冯佳老师讲过,在创建B的对象的时候,会特意在里面开一个内存用super指向,并在这个内存中存储从A中继承下来的A的成员。所以JVM并不会创建A的对象。
回复 使用道具 举报
qetu001212 发表于 2016-7-26 23:47
我记得冯佳老师讲过,在创建B的对象的时候,会特意在里面开一个内存用super指向,并在这个内存中存储从A中 ...

那按你这么说B是怎么访问A的成员的?B不应该是通过A的对象访问吗?你的意思是A的成员都转移到B中了?
回复 使用道具 举报
HeiMa2Wangkunpe 发表于 2016-7-26 23:44
A中好像没有get  set  方法吧

他有成员变量不就有get set方法吗?
回复 使用道具 举报
牧风 发表于 2016-7-27 00:04
那按你这么说B是怎么访问A的成员的?B不应该是通过A的对象访问吗?你的意思是A的成员都转移到B中了? ...

能被继承的就会被B继承,如果继承需要不停的建对象调用对象方法,那要这个继承有啥用?费内存不说,还要写这么多东西。我一万次继承,用最底层调用最高层的方法。那电脑要创建一万个对象,这么多内存谁出?要这种语言有个卵用。。。
到此为止,你不同意就去看sun公司对extends的解释吧。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马