子类是否继承父类的私有成员呢
子类是否继承了父类的私有成员,怎么才算是继承了,怎么算没有继承?
比如:父类Parent有个私有成员,有个受保护的方法,在该方法中打印出这个私有成员。
然后子类 Child继承Parent,如果在其他类,比如包含主函数的类中,实例化Child,这时这个实例化对象 无法调用Parent的受保护的方法。
C# code
class Parent
{
private string privateName;
public string publicName;
//这个方法的访问修饰符改为public的话,可以在其他类中由子类调用该方法,但是也会报错
protected void GetName(string nameFromOut)
{
privateName = nameFromOut;
Console.WriteLine(privateName);
}
}
class Child : Parent
{
}
C# code
class Program
{
public static void Main(string[] args)
{
Child c = new Child();
//这里无法调用其父类的受保护的方法
Console.ReadKey();
}
}
而如果在 子类内部实例化一个 子类的对象,再由这个对象 调用父类的方法,则是可以访问的父类的私有成员,如:
C# code
class Child : Parent
{
public void GetParentPrivateName()
{
Child c = new Child();
c.GetName("Tom");
publicName = "Jerry";
Console.WriteLine(publicName);
}
}
难道好比 父亲有2W大洋的私房钱,儿子是无权动用的,但是儿子可以趁老子不在家的时候 拿来花?
------解决方案--------------------
子类可以访问protected成员,Child类里面可以直接写this.GetName()。而Main方法是属于Program类,因此不能访问非public的方法。
------解决方案--------------------除非用public来修饰,否则使用正常方法是没法访问protected成员的。
------解决方案--------------------public:访问不受限制。
protected: 访问仅限于包含类或从包含类派生的类型。也就是说只能自己调用或者被其儿孙调用,
不能被其他类调用。
internal:访问仅限于当前程序集。