为什么子类可以继承父类的private的成员,但是不可以直接访问?

崔鹏飞 2009-03-02 08:50:37
为什么子类可以继承父类的private的成员,但是不可以直接访问?

是基于什么考虑这样设计的?
...全文
1743 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
wh0206 2009-03-06
  • 打赏
  • 举报
回复
子类不可以继承父类的private的成员
在子类中 super.name 可以使用,是因为是super关键字。

super关键字:代表的是父类的一个实类。
this关键字:代表的是类本身的实类。

如下:
super.name 语法等效如下:
parent p = new p();
p.name;
我姓区不姓区 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyi8808 的回复:]
子类不可以继承父类的private的成员
[/Quote]
可以继承的,但是不能直接访问而已
子类是会把父类所有的成员都继承的,包括私有成员
冷月孤峰 2009-03-02
  • 打赏
  • 举报
回复
private不可以继承的!
protected可以被子类继承!
liangpei2008 2009-03-02
  • 打赏
  • 举报
回复
protected
JaggerLee 2009-03-02
  • 打赏
  • 举报
回复
大大门,那个super是我乱写的....
而且整个就是错的..

...俺还是太菜了
hhxxcj 2009-03-02
  • 打赏
  • 举报
回复
九楼的解释挺有趣,还不错,意思也对
天乐 2009-03-02
  • 打赏
  • 举报
回复
super.name
这个是什么?

java的,类似c#中的base.name
Nathan_Loo 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 JaggerLee 的回复:]
你的意思是?
C# code

class parent
{

private string name;

}

class child : parent
{
public string getname()
{
return super.name;
//return name; //这样子就不行
}
}


[/Quote]


super.name
这个是什么?
人工智能算法 2009-03-02
  • 打赏
  • 举报
回复
私有的是不可以被继承的
楼主说的是当一个父类的公共方法被继承时为什么能访问父类中的私有属性吗?

其实是这样的 继承后其实这个方法并不是子类的 而是父类的,所以它理所当然能访问本类下的成员

楼主可能是把继承弄错了

class Parent
{
private string _name;
public string GetName()
{
return _name;
}
}

class Child : Parent
{
public string ParentName()
{
return GetName();//楼主不要以为这里是自己的GetName方法 其实是隐式调用了 base.GetName();
}
}
HsWong 2009-03-02
  • 打赏
  • 举报
回复
是的,你也可以用protected方法让派生类访问
崔鹏飞 2009-03-02
  • 打赏
  • 举报
回复
子类可以通过从父类继承来的公有方法来访问父类的私有字段

这样说对吗?
ctan 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 cuipengfei1 的帖子:]
为什么子类可以继承父类的private的成员,但是不可以直接访问?

是基于什么考虑这样设计的?
[/Quote]

这主要是为了防止在子类中修改父类中用private指定的成员值
sunshine_anycall 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 phoenix8343_cn 的回复:]
父亲有一个盒子,里面放着一个小秘密,可能是和母亲的情书,然而盒子是锁着的,钥匙只有父亲才有。
孩子知道父亲有一个盒子,也知道父亲去世以后盒子和那把钥匙就是自己的了,然而,现在,孩子没有钥匙,也就看不到里面的东西,除非父亲打开盒子给孩子看,或者父亲打开盒子自己把情书念给孩子听。
[/Quote]
up
很形象!
iGouzy 2009-03-02
  • 打赏
  • 举报
回复
PS:子类可以继承父类的所有成员
iGouzy 2009-03-02
  • 打赏
  • 举报
回复
父亲有一个盒子,里面放着一个小秘密,可能是和母亲的情书,然而盒子是锁着的,钥匙只有父亲才有。
孩子知道父亲有一个盒子,也知道父亲去世以后盒子和那把钥匙就是自己的了,然而,现在,孩子没有钥匙,也就看不到里面的东西,除非父亲打开盒子给孩子看,或者父亲打开盒子自己把情书念给孩子听。
SealedLove 2009-03-02
  • 打赏
  • 举报
回复
不可以继承
使用protected类和类的派生类可以访问
pcjbird 2009-03-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 JaggerLee 的回复:]
你的意思是?

C# code
class parent
{

private string name;

}

class child : parent
{
public string getname()
{
return super.name;
//return name; //这样子就不行
}
}
[/Quote]


super????? java~~~~~~~~~
delphi_911 2009-03-02
  • 打赏
  • 举报
回复
子类不可以继承父类的private成员。
但可以以private的方式继承父类,如:

class parent
{

private string name;

}

class child : private parent
{
...
}
zgke 2009-03-02
  • 打赏
  • 举报
回复
不可以继承....

你可以使用 protected 保护类成员
Dobzhansky 2009-03-02
  • 打赏
  • 举报
回复
空间是要占领的, 只是看不到, 一片灰色地带
加载更多回复(20)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧