using System.IO;public class Father
{
protected string test()//如果换成public就可以了
{
return "Father";
}
}class Child: Father
{
public static void Main() 
{
Child c = new Child();
Father f = 
(Father)c; System.Console.WriteLine(f.test());//问题出现在这里,我以为在子类里面放温父类的public或者protected应该都是一样的
}
}

解决方案 »

  1.   

    你这是在子类里面访问父类的对象的方法在子类里面访问父类的方法应该这样
    System.Console.WriteLine(test());
    直接调用继承的方法
      

  2.   

    谢谢楼上的,问题是基类里面如果改为public,后面就可以这么访问了,这是为什么呢
      

  3.   

    访问基类的方法用 base 关键字...
    比较 base.Test()
      

  4.   

    System.Console.WriteLine(f.test());//问题出现在这里,我以为在子类里面放温父类的public或者protected应该都是一样的你的这种已经不是在子类里面访问了..已经是一个新的实例,而不是在字类中了...
      

  5.   

    不是对于继承的类来说protected和public有一样的效果吗?
      

  6.   

    比如你爸用左手写字,是个protected方法,你继承了这个方法,
    你也可以用左手写字,但你不能用你爸的左手写字你爸有个盖章的public方法,任何人只要拿到图章,就可以盖章
      

  7.   

    to ekinwt(沧海依粟) 
    你的这种已经不是在子类里面访问了..已经是一个新的实例,而不是在字类中了...谢谢你的回答,不过我想就算是一个新的实例,但是child是继承自father类,所以新的实例应该能访问father类的protected成员的,我是这样认为的不知道对不对?
      

  8.   

    我想你有一个很严重的问题没有弄清楚..你的 Main 方法是一个静态方法,而静态方法是不属于任何类的,虽然你的 Main 方法写在 Child 中....
    所以你的想法是错的.你在Main 中实例化一个 Child 类,你应该也清楚这个类只是属于 Main ,而不属于 Child 吧?
    说的有点乱,体会前面的那句话就可以了.
      

  9.   

    sorry,我说的是错的,8好意思~
      

  10.   

    to ekinwt(沧海依粟) 
    还是有个地方没弄没白,你的意思是否main方法只能访问这些类的public方法?
      

  11.   

    Main 是一个静态方法,他不属于任何类,也就是说他相对于类都是独立的,在类的外面访问一个类,当然只能访问类的 Public 方法了啊,....
      

  12.   

    那么如果我在child类里面写一个private方法,是否在main方法里面无法访问了呢,就算main方法是在child类里面?
      

  13.   

    好像在main里面能访问child类的private方法的哦
      

  14.   

    using System.IO;public class Father
    {
    protected string test()//如果换成public就可以了
    {
    return "Father";
    }
    }class Child: Father
    {
    private string test2()
    {
    return "Child";
    } public static void Main()
    {
    Child c = new Child();
    System.Console.WriteLine(c.test2());//可以访问private方法 Father f =
    (Father)c; System.Console.WriteLine(f.test());//问题出现在这里,我以为在子类里面放温父类的public或者protected应该都是一样的
    }
    }
      

  15.   

    如果在main里面可以访问child类的private方法,为何无法访问father类的protected方法呢?
      

  16.   

    我想是这样,你创建的是Child对象,
    f是强制转换为Father对象,类型变了但引用并没有变,还是原来的Child对象;
    而f.test()调用的是本身的方法,而不是父类的
    但实际上本身并不包含此方法调用继承的方法,是要来自父类的
      

  17.   

    c是Child类型,f是Father类型,但是都引用同一个Child对象
      

  18.   

    如果f是重新创建的Father对象,就可以访问了
      

  19.   

    protected 和 private 类似private 修饰的成员只能在类中可以访问,这个大家都很清楚而父类的protected修饰的成员,可以在子类中使用,使用方法和子类的private成员完全相同。
    比如你将一个类实例化后就不能使用私有成员了;子类实例化后,父类的protected同样不能使用。所以结合你的例子:using System.IO;
    public class Father
    {
        protected string test()//如果换成public就可以了
        {
            return "Father";
        }
    }class Child: Father
    {
        private void Print()
        {
           string ss=Test();//这样就可以访问
        }
        public static void Main() 
        {
            Child c = new Child();
            Father f = (Father)c;
            System.Console.WriteLine(f.test());//问题出现在这里}
        }
    }
      

  20.   

    Main(){}不放在Child{...}中是怎么样呢?
    private 限定的方法是否也不能够通过实例对象访问了?
      

  21.   

    静态Main()方法放错了地方。
    class Father
    {
    ...
    }
    class Child:Father
    {
    ...
    }class test
    {
         static void Main()
         {
              Child c=new Child();
              Father f=(Father)c;
              System.Console.WriteLine(f.test());
         }
    }