子类是否继承父类的私有成员呢

吾非大神 2012-05-30 04:23:14
子类是否继承了父类的私有成员,怎么才算是继承了,怎么算没有继承?

比如:父类Parent有个私有成员,有个受保护的方法,在该方法中打印出这个私有成员。

然后子类 Child继承Parent,如果在其他类,比如包含主函数的类中,实例化Child,这时这个实例化对象 无法调用Parent的受保护的方法。


class Parent
{
private string privateName;
public string publicName;
//这个方法的访问修饰符改为public的话,可以在其他类中由子类调用该方法,但是也会报错
protected void GetName(string nameFromOut)
{
privateName = nameFromOut;
Console.WriteLine(privateName);
}
}

class Child : Parent
{
}



class Program
{
public static void Main(string[] args)
{
Child c = new Child();
//这里无法调用其父类的受保护的方法
Console.ReadKey();
}
}


而如果在 子类内部实例化一个 子类的对象,再由这个对象 调用父类的方法,则是可以访问的父类的私有成员,如:

class Child : Parent
{
public void GetParentPrivateName()
{
Child c = new Child();
c.GetName("Tom");
publicName = "Jerry";
Console.WriteLine(publicName);
}
}

难道好比 父亲有2W大洋的私房钱,儿子是无权动用的,但是儿子可以趁老子不在家的时候 拿来花?
...全文
1095 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
依旧一生有你 2014-08-05
  • 打赏
  • 举报
回复
引用 4 楼 avphoenixi 的回复:
而在 public static void Main(string[] args) 里去调用就等于外人问儿子要那笔钱,当然不能给他
你说的太形象了,protected方法子类可以继承的,但是在主类里当然不能用了
依旧一生有你 2014-08-05
  • 打赏
  • 举报
回复 1
好老的帖子了,今天看到一种新的解释,别人的 首先我们明确一下“继承”一词的概念,在 Java 中,继承一词的意义是有限制的。一个子类只能继承其父类的可访问的成员,并且该子类没有覆盖或者说隐藏父类中的那些可访问成员。所以,一个类的成员就是指在这个类中所声明的属性和方法,再加上从其父类继承而来的属性和方法。也就是说,子类是不能继承父类的私有成员的。 虽然子类不继承父类中的私有成员,但是在父类中生命的这些私有成员仍然是子类类型对象的一部分。因为在实例化对象的时候,只初始化在当前类中所声明的属性明显是不足够的,还需要初始化其父类中所有声明的属性。在实例化的过程中,JVM 需要为对象的类及其父类中所有定义的属性分配空间,包括父类中声明的私有成员。 所以,我们可以说:子类不能从父类继承私有成员,但是子类的对象是包括子类所不能从父类中继承的私有成员的。
阿木木丶豆芽 2012-11-26
  • 打赏
  • 举报
回复
按照准确的来说,在C#.NET中子类是继承父类的所有属性和方法,包括私有的(private),但是在使用时我们不考虑私有的是否被继承,除非考试的选择题中有可能出现;但是在java中就继承来说子类是不继承父类私有的(private)的属性和方法的!
xuelang1225 2012-06-01
  • 打赏
  • 举报
回复
首先明确的说明,子类继承父类所有的属性和方法,包括私有的,只是在子类中不能被访问而已。+1,然后你就看下private,protected ,public各自能访问的是什么
hwangt0 2012-06-01
  • 打赏
  • 举报
回复
能继承,但不能调用。
王晓彤 2012-06-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

继承的!
首先明确的说明,子类继承父类所有的属性和方法,包括私有的,只是在子类中不能被访问而已。
[/Quote]

确定是被继承的,撸主可以用IL工具查看一下。
小枪 2012-06-01
  • 打赏
  • 举报
回复
按道理那是继承的 java中也是 但是没有公开权限看不到
全局变量 2012-06-01
  • 打赏
  • 举报
回复
你想用受保护的方法,要
自己重新在子类声明
如:private void GetName(string nameFromOut)
{
base.GetName(nameFromOut);
}
zincy 2012-06-01
  • 打赏
  • 举报
回复
子类不能调用,有几个人非要说继承,钻牛角尖,
你自己写代码时会这么考虑:private了还要被继承,小心写哦不能影响子类哦。
xuelang1225 2012-06-01
  • 打赏
  • 举报
回复
受保护的方法是可以在子类中调用的,但是你上面在main方法中不能调用是因为你是在program类中调用的,
moonwrite 2012-05-31
  • 打赏
  • 举报
回复
你不小心看错了把
Child c = new Child();
c.GetName("Tom");
publicName = "Jerry";
Console.WriteLine(publicName);

private string privateName;//你都没有用到privateName
public string publicName;

顶6楼
mathieuxiao 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
继承的!
首先明确的说明,子类继承父类所有的属性和方法,包括私有的,只是在子类中不能被访问而已。
[/Quote]
乔巴说的非常有道理,lz可以测试一下这个例子

class Father
{
public string A;
private string _B;

public void FatherFunction(Child child)
{
string s = child._B;
}
}

class Child : Father
{

}

这个例子充分说明了父类的所有成员都是可以被子类继承的,至于能不能用则要看使用的“场合”,在父类的范围中,什么都看得到。在子类里面就只能看到protected和public修饰的成员了
caoxin250 2012-05-31
  • 打赏
  • 举报
回复
这个例子诠释了:protected 的用途~

Child c = new Child(); 当然不能调用了 protected函数。
Parent myP=new Parent(); 也不能调用自己的protected。
这都是外部调用。

在 Child 内部是可以调用 父类的protected 函数的。
快乐乔巴 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
难道好比 父亲有2W大洋的私房钱,儿子是无权动用的,但是儿子可以趁老子不在家的时候 拿来花?
[/Quote]

最后句不对

[Quote=引用 2 楼 的回复:]

这样理解 父亲有2W大洋的私房钱,他授权儿子能用,别人不能用,就用 protected 修饰这笔钱,如果外人也能用,就 public 修饰,如果只有自己能用,其他人都不行,就 private 修饰了。
[/Quote]

但是这句话你说对了
快乐乔巴 2012-05-31
  • 打赏
  • 举报
回复
继承的!
首先明确的说明,子类继承父类所有的属性和方法,包括私有的,只是在子类中不能被访问而已。
泪梦红尘 2012-05-31
  • 打赏
  • 举报
回复
不继承,私有成员只属于当前类
__天涯寻梦 2012-05-31
  • 打赏
  • 举报
回复
而在 public static void Main(string[] args) 里去调用就等于外人问儿子要那笔钱,当然不能给他
llkaximoduo 2012-05-31
  • 打赏
  • 举报
回复
不继承
__天涯寻梦 2012-05-31
  • 打赏
  • 举报
回复
这样理解 父亲有2W大洋的私房钱,他授权儿子能用,别人不能用,就用 protected 修饰这笔钱,如果外人也能用,就 public 修饰,如果只有自己能用,其他人都不行,就 private 修饰了。
qq13833254607 2012-05-31
  • 打赏
  • 举报
回复
不要把继承想的太复杂了,原则很简单:private只能类自己访问,protected类和子类能访问,public谁都可以访问。还有问题吗

110,534

社区成员

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

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

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