前几天我一个朋友问我,在子类中为什么不能访问父类的protected方法?
她在某本书上看到的代码大概是如下所示:
public class A
{
public string Name = "";
protected int Age = 0;
}
public class AB : A
{
public void Init()
{
A a = new A();
a.Name = "lifengguo";
a.Age = 24;
}
}
但是她编译时总是不能通过,她问我为什么?是我的理解是:
Protected是受保护成员,它在它的类中可访问并且可由派生类访问。
上面的一句包含了三层意思:
1、 类的本身可以访问;
2、 派生类中可以访问;
3、 类的实例是不能够访问Protected成员的。
下面代码是在类的本身使用了Protected成员
public class A
{
public string Name = "";
protected int Age = 0;
public A()
{
Name = "lifengguo";
Age = 24;
}
}
下面的代码是在派生类中使用了Protected成员
public class AB : A
{
public AB()
{
base.Name = "黎锋果";
base.Age = 24;
}
}
下面的代码是类的实例访问类的成员:
public class C
{
public void Init()
{
A a = new A();
AB ab = new AB();
a.Name = "lifengguo"; //OK
ab.Name = "黎锋果"; //OK
a.Age = 24; //Error
ab.Age = 24; //Error
}
}