一个关于类实例化的基础问题
小弟初学c#,问个关于类实例化的问题.一个类要实例化必须先实例化它的基类,一层一层,直到system.Object,又说抽象类不可以实例化,
那如果在实现一个类a,它继承与B,b为抽象类,那B怎么实例化啊,不是说一直要到Object吗?那不是中途中断了? --------------------编程问答-------------------- 晕直接实例化类B就行
用哪个类就实例化哪个~抽象类是不能被实例化的~
--------------------编程问答-------------------- 这个我知道,
比如我要实例化a,b是它的基类,
那么在实例化A的时候,.net是会去实例化B的啊 --------------------编程问答-------------------- 路过~~ --------------------编程问答-------------------- 首先你要明白继承的意义,子类继承基类,从面向对象的思想来说应该就是继承基类的属性和行为,从纯编程(写代码)基本目的就是为了实现代码重用!
对于,子类的实例化,并不会作用于基类,因为子类的继承,已经把父类的所有属性和行为据为己有,如同copy.
--------------------编程问答-------------------- 这个我知道,
比如我要实例化a,b是它的基类,
那么在实例化A的时候,.net是会去实例化B的啊
classA aa=new classA();
这样只实例化A并没实例化它的基类B啊~
但是B的东西可以被对象aa引用了~ --------------------编程问答-------------------- class a
{
public a()
{
Console.WriteLine("aaaaaa");
}
}
class b : a
{
public b()
{
Console.WriteLine("bbbbbb");
}
}
class Program
{
static void Main(string[] args)
{
b my = new b();
Console.ReadKey();
}
}
这段代码的输出结果是
aaaaaa
bbbbbb
证明基类的构造函数还是会被调用的啊 --------------------编程问答-------------------- 试试如果把类A换成抽象类,看看是否还会执行类A的构造函数 --------------------编程问答-------------------- 构造函数是自动运行的~所以根本不用实例化~
这里子类会自动运行基类的构造~但并没实例化啊~
其实别的类也执行基类的构造,只不过像Object这样的类构造很可能为空~(具体我也没看过哈哈~) --------------------编程问答-------------------- 但书上怎么有这样一句原话:一个类要实例化必须先实例化它的基类 --------------------编程问答-------------------- 很晕~你上面自己写的程序也没实例化基类a啊
只是实例化了子类b,那么它还不是一样正常调用了?
这样,就和书上冲突了呵呵~什么破书啊?
偶给你推荐一本
《概念到代码》
韩磊 戴飞翻译的
《Bengin C# Object From Concepts to Code》 --------------------编程问答-------------------- 个人觉得用哪个类就实例化那个类就行
这和继承关系并不大~
不用先实例化基类再实例化子类,直接实例化子类来用就可以了,只不过子类会自动调用基类的构造函数就是了~
但抽象类是不能实例化的~ --------------------编程问答-------------------- C#入门经典(第3版)啊,这个还是权威吧.
原话是:"要实现派生的类,必须实例化它的基类,要实例这个基类,必须实例这个基类的基类.这样一直实例到System.Object为止"
这怎么说啊.
--------------------编程问答-------------------- 高手说明一下啊 --------------------编程问答-------------------- 我认为应该是这样的理解的
派生类在执行构造函数之前必定先调用基类的构造函数.
--实例化一个类和调用一个构造函数还是有很的区别的.
c#只说抽象类不能实例化一个类有没说不能调用抽象类的构造函数 --------------------编程问答-------------------- :"要实现派生的类,必须实例化它的基类,要实例这个基类,必须实例这个基类的基类.这样一直实例到System.Object为止"
是不是翻译有问题?我语言能力有限,感觉像是绕口令~
要按你的理解你自己做的例子根本实现不了~ --------------------编程问答-------------------- 继续顶这个问题.谁能给一个详细的解释给小弟啊 --------------------编程问答-------------------- Mark --------------------编程问答-------------------- 我想我理解你的意思```
首先```实例化一个子类对像时```它首先会默认调用基类的构造函数(当基类中没有定义构任何构造函数时),然后才调用本身的构造函数```` 就比如你写的这些代码``
class a
{
public a()
{
Console.WriteLine("aaaaaa");
}
}
class b : a
{
public b()
{
Console.WriteLine("bbbbbb");
}
}
class Program
{
static void Main(string[] args)
{
b my = new b();
Console.ReadKey();
}
}
而C#中有规定,抽像类不能够实例化,然后你就假设a是抽像类的话,当实例化b时,a不也就`````````````
楼主想说的应该是这个意思吧?!~之前我也没有注意到这些``听你这么一说似乎也觉得有些矛盾,认真想想``觉得应该是像14楼说的那样吧``调用跟实例是有区别的``不直接new抽象类就得````````这也是我自己的理解了``还是想听听高手的指点````` 继续关注中````````` --------------------编程问答-------------------- 可能是分太少了.大牌门都不来.不过我实在没分加了 --------------------编程问答-------------------- 18楼的就是我说的意思 --------------------编程问答-------------------- 乱七八糟的
补充:.NET技术 , C#