社区
Java SE
帖子详情
private 属性到底能不能被子类继承?
zgh_remond
2005-07-04 09:50:07
这个问题可能看起来很简单,但我找了许多书,给出的答案都很模糊,在这里要听听高人的看法。
子类可以继承通过父类的public 方法 访问private属性,这是否也意味着private属性能被继承。
...全文
7977
56
打赏
收藏
private 属性到底能不能被子类继承?
这个问题可能看起来很简单,但我找了许多书,给出的答案都很模糊,在这里要听听高人的看法。 子类可以继承通过父类的public 方法 访问private属性,这是否也意味着private属性能被继承。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
56 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Preamble
2005-07-07
打赏
举报
回复
什么叫继承?
我想听听大家说!
面向对象思想与 语言的实现,有直接关系吗?
在实现上,子类拥有父类的一切。但从面向对象说,这不并是说子类继承了父类。而仅仅是java的一种实现
这就好比java是单根Object,可是面向对象的理论中是由多重继承的。这又怎么解释?
同意 回复人: qybao(阿宝) ( ) 信誉:100
chuanyuan88
2005-07-07
打赏
举报
回复
2
在我看来, 子类继承父类的一切东西. <Thinking in JAVA>中说到, 子类对象拥有父类对象的完整拷贝. 实例化一个类是从最顶级的超类开始实例化的, 是一层一层的包裹结构. private限制访问方式只能在类的内部, 这仅仅是一个访问控制, 实际上子类对象拥有父类对象的一切.
个人同意这样的观点
midthinker
2005-07-07
打赏
举报
回复
问题是我们需要如此在乎内在的实现吗?
对于我们来说使用JAVA编程就好象是使用一种约定俗成的规范构造程序一样,我们更在乎的应该是应用域的问题,其次是解决域的问题,至于语言底层的实现机制是如何的似乎并不那么重要。
重要的是,我们知道面向对象中关于继承的机制与规范,至于C++是如何实现的,JAVA是如何实现的,交给语言学家就可以了(或者感兴趣的人们也可以尝试成为该领域的专家)。另外如果我们依然要讨论面向对象是什么?继承又是什么?依我看还是交给哲学家去争论吧。。。
HOHO~~~
@.@||~
dugumu
2005-07-06
打赏
举报
回复
不能。任意一个类A都可以通过另一个类B的public 函数访问B的private数据。
Jokehan
2005-07-06
打赏
举报
回复
子类调用父类的构造函数是为了初始化被子类继承下来的“所有数据成员(难道private成员就不是了??)”,而不是去为了创建一个父类对象而调用的,如果按照有些朋友所说的“dyh506(浪) 的答案很正确,子类里有一个完整的父类。”,那如果我所继承的父类是一个抽象类,试问怎么产生此父类的实例??:)
说好不能打脸
2005-07-06
打赏
举报
回复
不能,但可以通过get、set方式访问
Jokehan
2005-07-06
打赏
举报
回复
楼楼上的Dan1980(也该有一些作为了)兄基本说对:)
Jokehan
2005-07-06
打赏
举报
回复
呵呵,楼上两位先去把TIJ第六章的继承这节熟读搞懂吧:)
Dan1980
2005-07-06
打赏
举报
回复
这个问题没必要再讨论了, 楼主可以结贴了. 我举个例子:
public class Ball {
private int radius;
public Ball(radius) {
this.radius = radius;
}
public int getRadius() {
return radius;
}
}
class BasketBall extends Ball {
BasketBall(radius) {
super(radius);
}
}
篮球继承了球, 半径属性是球私有的, 难道说篮球没有半径属性, 从现实世界的角度来看, 显然有!!!
而从程序逻辑上看, 也是有的:
如果你说, 因为不能用new BasketBall(10).radius这种方法来访问radius的值, 就说明BasketBall没有radius属性. 那么, 你能用new Ball(10).radius来访问radius的值吗? 也不能吧?? 那岂不是Ball也没有Radius属性了???
上面的分析, 足以说明, private属性是被继承了的.
jinguizi
2005-07-06
打赏
举报
回复
同意,简单说就是子类可访问到父类private属性的成员,但这不是继承了父类私有属性成员
midthinker
2005-07-06
打赏
举报
回复
呵呵,楼上众朋友讨论的好激烈,
就在下的观点,这个问题似乎被各位解释的牵强了,如果要问实现的底层机制是不是子类直接映射到整个父类,但只是在访问时加了层访问控制(这似乎就是楼上的许多朋友对JAVA继承的观点),我不是JAMES,所以无法回答。
不过,如果是问继承功能在JAVA中的表现形式,我到是可以蛮有把握的说,private field/method 即无法被子类继承,亦不能被子类访问。
至于哪位高人就底层(说到底层实现了,那还真不知道是不是非要套上个面向对象了)的实现机制有相当的了解,到是应该站出来发一帖,即让大家长长见识,又可平息了争论。
呵呵
@.@||~
ericsion
2005-07-06
打赏
举报
回复
dyh506(浪) 的答案很正确,子类里有一个完整的父类。但是由于父类private因此子类无法继承。不有以为通过父类非私有方法(具体是public protected default看情况而定)可以访问到private属性就说可以继承。重要的是在你的子类里是否可以直接引用该属性。
想象一下,你遇到了一个不是你写的类通过文档你发现其中有几个private属性,而你无法直接访问只能通过对你公开的方法访问,那么你认为你继承那个类了吗?
qybao
2005-07-06
打赏
举报
回复
你继承了你父亲的一部分DNA,但你就是不能去掉这部分来自你父亲的遗传DNA(也就是不能直接访问,夸张一点说,没有任何方法可访问该属性,除非你DNA突变,变异了,换句话说,系统异常或崩溃了),这是否说明你不继承你父亲的遗传DNA?继承和访问是两个概念,同样,继承和封装也是两个概念,你继承了你父亲的DNA,并不代表破坏了你父亲对DNA的封装,因为你始终就是不能直接访问?
-------- --------
|驱动程序| |操作系统|
|--------| --〉|--------
| 硬 件 | |驱动程序|
-------- |--------|
产品1 | 硬 件 |
--------
产品2
产品1的硬件为私有private,产品1的驱动程序层可以直接访问硬件层,产品2继承产品1,产品2的操作系统层不能直接访问硬件层,但是可以通过调用驱动程序层的接口访问硬件层(也就是通过调用父类的public方法访问private属性),是否认为产品2不继承产品1的硬件?产品1对硬件(private属性)进行了封装,使得产品2子类也不能直接访问,但是产品2还是离不开硬件这个private属性,否则产品2将无法正常运作。
我印象中这个问题很多书都有相关的讨论,大家去看看就明白了,不要把概念混淆了。
Jokehan
2005-07-06
打赏
举报
回复
无可争论,父类的private成员是可以被子类继承下来的,而只是受到了private的影响从而限制了访问权限!
Dan1980
2005-07-06
打赏
举报
回复
从对象逻辑上考虑, 似乎private是父类私有的, 不能遗传给子类, 这种说法也有其道理.
但是很多持这种观点的人, 特别是初学者, 只是从表面上来认识这个问题, 未免有失严谨.
正如<Thinking in JAVA>中提到了"问题空间(Problem Space)"和"解决空间(Solution Space)", 面向对象思想的流行让我们把注意力更多地转移到了"问题空间", 但"解决空间"同样也是不能忽视的. OO并不是完美无缺, 试图用OO来解释一切也是不可行的.
laughsmile
2005-07-06
打赏
举报
回复
我同意子类对象的存储空间包含了父类的private属性的存储空间,创建子对象的时候,在这个对象里面自动包含了一个父类对象.
但是,这就说明父类的private变量被子类继承了么?
我觉得那样就完全颠覆了OO的封装性.OO的封装性就是通过private实现对自己私有数据成员的隐藏而实现.
其实,这只是一个概念问题,具体的逻辑都已经清楚了
dyh506
2005-07-06
打赏
举报
回复
|-------|
| 父类 | 这是在内存中的状态子类拥有一个完整的父类.
|-------|
|子类 |
|_______|
ukey235
2005-07-06
打赏
举报
回复
写段代码测试一下不就知道!
Jokehan
2005-07-06
打赏
举报
回复
还有人说不能,心寒,我楼下的[yinwenjie(java入门中)]和[dugumu()]这两位朋友请先搞懂后在发言,请不要不负责任的发言- -!
Dan1980
2005-07-06
打赏
举报
回复
同jokehan(): 无语中.....!
加载更多回复(36)
JAVA中私有
属性
private
能被
子类
继承
吗?
本文探讨了Java中私有
属性
(
private
)是否可以被
子类
继承
的问题,并给出了明确的答案:
子类
不能
直接访问父类的私有
属性
,但可以通过
继承
获取父类的其他非私有成员。
private
java
继承
_Java
继承
-
子类
不能
直接
继承
父类中的
private
属性
和方法
本文介绍了Java中类的
继承
概念,强调了
private
属性
和方法
不能
直接被
子类
继承
,需要通过有参构造函数来实现。示例展示了如何在Penguin类中通过super关键字
继承
Animal类的私有
属性
,并在PenguinQQ主类中创建实例并调用相关方法。
php的封装
继承
,PHP面向对象 封装与
继承
本文详细介绍了PHP中的类封装特性,包括public、
private
、protected的使用,以及PHP
继承
的概念。通过实例展示了如何创建类、对象,以及
子类
如何
继承
和重写父类的
属性
和方法。需要注意的是,PHP支持单
继承
,即一个父类只能有一个
子类
,而
private
修饰的
属性
和方法
不能
被
子类
继承
。
final类
本文详细介绍了Java中final关键字的使用场景,包括final类、final方法和final成员变量的特点,强调了final类
不能
被
继承
,final方法
不能
被
子类
覆盖,以及final成员变量作为常量的特性。同时讨论了final类的设计原则和
private
成员方法默认的final
属性
。
继承
extends super 方法的重写
本文探讨了Java中的
继承
概念,指出
子类
如何通过`extends`关键字
继承
父类的
属性
和方法。强调了
private
方法
不能
被
子类
直接
继承
,但可以通过getter和setter访问。还提到了所有类都间接或直接
继承
自`Object`类,并介绍了`super`关键字的使用。最后,文章提及了方法重写(Override)的重要性及其在代码中的实践。
Java SE
62,622
社区成员
307,255
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章