日期:2014-05-18  浏览次数:20895 次

子类是否继承父类的私有成员呢
子类是否继承了父类的私有成员,怎么才算是继承了,怎么算没有继承?

比如:父类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:访问仅限于当前程序集。