网上有的人说是继承过来了,有的人说没有!我是这样理解的,如果单从这些私有成员在子类有没有分配内存空间来说,的确是继承过来了!如果是从面向的角度来说,继承过来的目的就是为了多态,代码重用的角度来说,继承过来了不能够使用来说,又没有继承!大家是什么观点?作者: 追寻Dream 时间: 2013-9-25 10:49
子类虽然访问不了父类的私有变量,但是可以通过方法访问 不能继承父类的私有成员 作者: -___Is、_C 时间: 2013-9-25 11:23
不继承,私有成员只属于当前类作者: 0和1,编程世界 时间: 2013-9-25 11:37
用private修饰的成员,子类是无法继承的。
子类是继承了父类,但如说是也继承了父类的私有成员,却不能使用,我认为这样是不对的。
因为继承是有意义的,如果继承了父类的成员,却不能使用,那怎么算是继承呢?所以说子类继承了父类的私有成员这样的说法是不合理的。作者: 段朝骞 时间: 2013-9-25 11:41
我觉得是继承过来了,子类实例化后给通过父类的公共属性给父类的私有字段赋值,取值,调试时发现在内存中私有字段也是开辟了空间的,下面是测试代码,有错误的地方请多多指教
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 继承测试
{
class Program
{
static void Main(string[] args)
{
Zi a = new Zi();
a.Say();
a.A = 100;//设置父类a属性
Console.WriteLine(a.A);//获取父类a属性
Fu f = a;
f.Say();
Console.ReadKey();
}
}
class Fu
{
private int a;
public int A
{
get { return a; }
set { a = value; }
}
public void Say()
{
Console.WriteLine("父类公共方法");
}
private void SiYou()
{
Console.WriteLine("父类私有方法");
}
}
class Zi:Fu
{
private int a;
public int A1
{
get { return a; }
set { a = value; }
}
private void SiYou()
{
Console.WriteLine("我是子类私有方法");
}
new public void Say()
{
Console.WriteLine("我是子类公共方法");
}
}
} 作者: Always. 时间: 2013-9-25 12:33
按照准确的来说,在C#.NET中子类是继承父类的所有属性和方法,包括私有的(private),只是在子类中不能被访问而已,但是在使用时我们不考虑私有的是否被继承。作者: 淡忘回忆 时间: 2013-9-25 14:19
在C#.NET中子类是继承父类的所有属性和方法,包括私有的(private),只是在子类中不能被访问而已。这里涉及到一个概念VTM(虚拟方法表),一个类的所有方法都会在VTM中,包括继承自父类的私有方法,只是不能访问。给你个例子你就会发现父类中的私有字段是可以继承的: