首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于承继后创建对象的一点疑问

2013-10-09 
关于继承后创建对象的一点疑问?今天突然想到,如果父类是抽象类,那么这个图貌似就有问题了。父类是抽象的话

关于继承后创建对象的一点疑问?


今天突然想到,如果父类是抽象类,那么这个图貌似就有问题了。父类是抽象的话就不能创建对象啊!我又有点支持第一种说法了。
关于这两种说法,到底哪个是对的呢?
到底在new B();时只加载了非private的属性方法还是加载了所有属性方法,只是被private的访问不到呢 ?



[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。

那我想问下:到底内存中为private的属性和方法分配了空间么?


当然分配了。 

我开始的理解是以为在创建子类对象时,会先创建父类对象,理所当然会拥有父类中所有属性方法,包括私有的。但是后来一想,如果父类为抽象类,那么就不能创建父类对象了。所以我开始支持第一种说法,也就是在new子类对象时,不会为私有属性方法分配空间。
因为子类访问不到,即使是同名的方法,也算是新定义的方法而不算重写。按您说的,那么Java为什么还要把父类的私有属性方法加载进来呢?岂不是浪费了空间?

但是通过反射又是可以访问到私有属性的,说明还是加载进来的吧


[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。

那我想问下:到底内存中为private的属性和方法分配了空间么?


当然分配了。 

我开始的理解是以为在创建子类对象时,会先创建父类对象,理所当然会拥有父类中所有属性方法,包括私有的。但是后来一想,如果父类为抽象类,那么就不能创建父类对象了。所以我开始支持第一种说法,也就是在new子类对象时,不会为私有属性方法分配空间。
因为子类访问不到,即使是同名的方法,也算是新定义的方法而不算重写。按您说的,那么Java为什么还要把父类的私有属性方法加载进来呢?岂不是浪费了空间?


怎么能说是浪费空间呢。这种特性其实在有些情况下是特别拥有,例如父类的有个属性需要对外设置成只读,那可以把get方法设置成public,把set方法设置成private就很好。有时候需要对某些属性或者方法设置保护,那么可以把对外的接口设置成public,可以起到保护的作用。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。

那我想问下:到底内存中为private的属性和方法分配了空间么?


当然分配了。 

我开始的理解是以为在创建子类对象时,会先创建父类对象,理所当然会拥有父类中所有属性方法,包括私有的。但是后来一想,如果父类为抽象类,那么就不能创建父类对象了。所以我开始支持第一种说法,也就是在new子类对象时,不会为私有属性方法分配空间。
因为子类访问不到,即使是同名的方法,也算是新定义的方法而不算重写。按您说的,那么Java为什么还要把父类的私有属性方法加载进来呢?岂不是浪费了空间?

但是通过反射又是可以访问到私有属性的,说明还是加载进来的吧


恩,我只是简单了解反射有这个功能,但是这个要怎么用反射来实现证明呢?
我也只是知道反射 里面貌似很复杂···
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

这两种说法都没有什么问题,只是你的理解不一样而已。private方法是访问不到的,但是并不能说它没有。

那我想问下:到底内存中为private的属性和方法分配了空间么?


当然分配了。 

我开始的理解是以为在创建子类对象时,会先创建父类对象,理所当然会拥有父类中所有属性方法,包括私有的。但是后来一想,如果父类为抽象类,那么就不能创建父类对象了。所以我开始支持第一种说法,也就是在new子类对象时,不会为私有属性方法分配空间。
因为子类访问不到,即使是同名的方法,也算是新定义的方法而不算重写。按您说的,那么Java为什么还要把父类的私有属性方法加载进来呢?岂不是浪费了空间?



加载父类时先要检查这个类的字节码是否在内存中存在,如果存在就不重新加载了,不存在就要加载。假如,我们用到了这个类中的某个方法,而这个类的这个方法恰好调用了这个类里面 的某个私有方法,你想一下,不加载进来程序能运行吗?

热点排行