子类是否继承父类的私有成员呢,该如何处理
子类是否继承父类的私有成员呢
子类是否继承了父类的私有成员,怎么才算是继承了,怎么算没有继承?
比如:父类Parent有个私有成员,有个受保护的方法,在该方法中打印出这个私有成员。
然后子类 Child继承Parent,如果在其他类,比如包含主函数的类中,实例化Child,这时这个实例化对象 无法调用Parent的受保护的方法。
而如果在 子类内部实例化一个 子类的对象,再由这个对象 调用父类的方法,则是可以访问的父类的私有成员,如:
难道好比 父亲有2W大洋的私房钱,儿子是无权动用的,但是儿子可以趁老子不在家的时候 拿来花?
------解决方案--------------------
不要把继承想的太复杂了,原则很简单:private只能类自己访问,protected类和子类能访问,public谁都可以访问。还有问题吗
------解决方案--------------------
这样理解 父亲有2W大洋的私房钱,他授权儿子能用,别人不能用,就用 protected 修饰这笔钱,如果外人也能用,就 public 修饰,如果只有自己能用,其他人都不行,就 private 修饰了。
------解决方案--------------------
而在 public static void Main(string[] args) 里去调用就等于外人问儿子要那笔钱,当然不能给他
------解决方案--------------------
继承的!
首先明确的说明,子类继承父类所有的属性和方法,包括私有的,只是在子类中不能被访问而已。
------解决方案--------------------
乔巴说的非常有道理,lz可以测试一下这个例子
这个例子充分说明了父类的所有成员都是可以被子类继承的,至于能不能用则要看使用的“场合”,在父类的范围中,什么都看得到。在子类里面就只能看到protected和public修饰的成员了
------解决方案--------------------
确定是被继承的,撸主可以用IL工具查看一下。
子类是否继承了父类的私有成员,怎么才算是继承了,怎么算没有继承?
比如:父类Parent有个私有成员,有个受保护的方法,在该方法中打印出这个私有成员。
然后子类 Child继承Parent,如果在其他类,比如包含主函数的类中,实例化Child,这时这个实例化对象 无法调用Parent的受保护的方法。
class Parent
{
private string privateName;
public string publicName;
//这个方法的访问修饰符改为public的话,可以在其他类中由子类调用该方法,但是也会报错
protected void GetName(string nameFromOut)
{
privateName = nameFromOut;
Console.WriteLine(privateName);
}
}
class Child : Parent
{
}
class Program
{
public static void Main(string[] args)
{
Child c = new Child();
//这里无法调用其父类的受保护的方法
Console.ReadKey();
}
}
而如果在 子类内部实例化一个 子类的对象,再由这个对象 调用父类的方法,则是可以访问的父类的私有成员,如:
class Child : Parent
{
public void GetParentPrivateName()
{
Child c = new Child();
c.GetName("Tom");
publicName = "Jerry";
Console.WriteLine(publicName);
}
}
难道好比 父亲有2W大洋的私房钱,儿子是无权动用的,但是儿子可以趁老子不在家的时候 拿来花?
------解决方案--------------------
不要把继承想的太复杂了,原则很简单:private只能类自己访问,protected类和子类能访问,public谁都可以访问。还有问题吗
------解决方案--------------------
这样理解 父亲有2W大洋的私房钱,他授权儿子能用,别人不能用,就用 protected 修饰这笔钱,如果外人也能用,就 public 修饰,如果只有自己能用,其他人都不行,就 private 修饰了。
------解决方案--------------------
而在 public static void Main(string[] args) 里去调用就等于外人问儿子要那笔钱,当然不能给他
------解决方案--------------------
继承的!
首先明确的说明,子类继承父类所有的属性和方法,包括私有的,只是在子类中不能被访问而已。
------解决方案--------------------
乔巴说的非常有道理,lz可以测试一下这个例子
class Father
{
public string A;
private string _B;
public void FatherFunction(Child child)
{
string s = child._B;
}
}
class Child : Father
{
}
这个例子充分说明了父类的所有成员都是可以被子类继承的,至于能不能用则要看使用的“场合”,在父类的范围中,什么都看得到。在子类里面就只能看到protected和public修饰的成员了
------解决方案--------------------
确定是被继承的,撸主可以用IL工具查看一下。