抽象类为什么可以实例化呢?真是怪怪的?

zsdlOO 2010-10-08 04:46:20
抽象类为什么可以实例化呢?真是怪怪的?
一直认为抽象类是无法实例化的,但是代码就在下面,确实可以实例化,真是晕了

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace d101008
{
class Program
{
public abstract class Class1
{
string name;

public Class1() { name = "No Name"; }
public Class1(string name)
{
Console.WriteLine("class1 中");
this.name = name;
}

public string Name
{
get
{
return name;
}
}
}

class Class2 : Class1
{
public Class2(string n) : base(n)
{
Console.WriteLine("class2 中");
}

}

static void Main(string[] args)
{
//Class1 是抽象类呀,为何可以实例化呢?
Class1[] obj = new Class1[2];
obj[0] = new Class2("aaaa");
obj[1] = new Class2("bbbb");
foreach (Class1 tmp in obj)
{
Console.WriteLine(tmp.Name);
}
Console.ReadLine();
}
}
}

...全文
209 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gengchenhui 2010-10-08
  • 打赏
  • 举报
回复
没有实例化。。。
symbol_bc 2010-10-08
  • 打赏
  • 举报
回复
这里的class1[],class1仅仅是作为类型而已,
如果代码编程这样
int[] ii = new int[2];
楼主就明白了吧,这里的int和class1是一样的,你总不能说int就是具体的1 2 3 4吧,他仅仅是类型而已。
机器人 2010-10-08
  • 打赏
  • 举报
回复
Class1[] obj = new Class1[2];

只不过是申明了一个容器这个容器是用来装载Class1的,
并没有实例化Class1。
guyehanxinlei 2010-10-08
  • 打赏
  • 举报
回复

Class1[] obj = new Class1[2];
1.定义一个大小为2且类型为Class1的数组,每个数组元素为NULL

obj[0] = new Class2("aaaa");
obj[1] = new Class2("bbbb");

2.分别为数组初始化为Class2

定义数组时只是在分配内存而非实例化抽象类Class1
viena 2010-10-08
  • 打赏
  • 举报
回复
Class1是抽象类,不可以实例化,但是Class1类型的变量是可以存在的呀
而且基类类型的变量,可以指向派生类的变量的
这个是多态性的最基本实现方式
Class1 obj1 = new Class2();
这样写也是一样的
guyehanxinlei 2010-10-08
  • 打赏
  • 举报
回复
Abstract class 肯定是不能够实例化的
mrying 2010-10-08
  • 打赏
  • 举报
回复
楼上正解 只是抽象类的引用指向了实例化的对象
viena 2010-10-08
  • 打赏
  • 举报
回复
声明了一个Class1类型的数组,实例化了两个Class2,并使Class1数组的元素指向这两个Class2对象,仅此而已
viena 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zsdloo 的回复:]
引用 1 楼 remagon 的回复:
Class1没有实例化,new了两个class2
Class1[] obj = new Class1[2]; 是实例化了一个数组


谢谢,这确实是实例化一个 Class1 数组,但是数组元素明明就是 Class1 呀。
[/Quote]

数组元素是Class1没错,但是哪里有实例化 Class1了?
实例化了一个Class1 数组,里面的元素都是null啊
zsdlOO 2010-10-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 remagon 的回复:]
Class1没有实例化,new了两个class2
Class1[] obj = new Class1[2]; 是实例化了一个数组
[/Quote]

谢谢,这确实是实例化一个 Class1 数组,但是数组元素明明就是 Class1 呀。
zsdlOO 2010-10-08
  • 打赏
  • 举报
回复
Class1[] obj = new Class1[2];

这里明明是 new Class1 呀,为何不是实例化呢?
zsdlOO 2010-10-08
  • 打赏
  • 举报
回复
Class1[] obj = new Class1[2];
这一句如何理解呢?
是实例化 class2

可是左边是class1呀,如何理解呢?我有点晕了
viena 2010-10-08
  • 打赏
  • 举报
回复
没看到实例化Class1的地方~
remagon 2010-10-08
  • 打赏
  • 举报
回复
Class1没有实例化,new了两个class2
Class1[] obj = new Class1[2]; 是实例化了一个数组

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧