从子类的孩子访问父成员

时间:2014-05-23 18:14:25

标签: java c# c++ .net

今天我面临一个非常奇怪的面试问题。面试官问我: -

有一个类Parent,它有一个方法GetData。类Child1继承Parent,Child2继承Child1。你可以在Parent类中做什么,以便可以从Child1访问方法“GetData”,但不能从Child2访问?

3 个答案:

答案 0 :(得分:2)

有点奇怪的设置,但是这里有另一个选项,因为嵌套类可以访问外部类的私有成员:

public class Parent
{
    public Parent()
    {
        GetData();
    }

    private void GetData()
    {
    }        

    public class Child1 : Parent
    {
        public Child1()
        {
            GetData();
        }
    }

}

class Child2 : Parent.Child1
{
    public Child2()
    {
        GetData(); //compiler error, inaccessible due to protection level
    }
}

答案 1 :(得分:2)

父类可以将它的方法标记为私有,然后在其内部声明第一个Child自己的声明。

    public class Job
    {

        private void Test()
        {

        }

        public class JobChild : Job
        {
            public JobChild()
            {
                //works
                this.Test();
            }

        }
    }


    public class JobChildTwo : Job.JobChild
    {
        public JobChildTwo()
        {
            //doesn't work
            this.Test();
        }
    }

答案 2 :(得分:1)

如果我们假设在程序集A中存在Parent和Child1而程序集B中存在Child2,并且程序集A在程序集B引用程序集A时没有将其内部公开给程序集B,则可以将GetData标记为内部,此时它可以被Child1访问,但不能访问Child2。

这里的副作用是它对整个组件都是可见的。

请注意,受保护的内部会产生相反的效果 - 它会使getData对child2可见,因为受保护的内部是明确的"受保护的或内部的"根据{{​​3}}