抽象类为什么可以实例化呢?真是怪怪的?
一直认为抽象类是无法实例化的,但是代码就在下面,确实可以实例化,真是晕了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();
}
}
}
一直认为抽象类是无法实例化的,但是代码就在下面,确实可以实例化,真是晕了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();
}
}
}
解决方案 »
- 如何用C#监测某文件状态,甚至知道该文件被改名了???
- c# Image 保存图片的小问题 怎么解决??
- DataGridViewComboBoxColumn
- c# winform如何将下面数字转换为数组?
- 关于添加方法功能的使用
- 如何全局获得鼠标移动,点击之类的消息
- 急求,引用命名空间的问题?
- treeview问题: web上如何才能正确显示数据库中数据呢?
- 求DataGrid打印,最好是实现过的,现在手头有一些资料,可是都不能用!!在线等!!急急!!
- 请高手帮忙开发个图开识别功能,有报酬
- 用两个不同dataview分别用rowfilter方法筛选日期后,出错.
- 请问如何在Winform中更有效的使用Webservice
Class1[] obj = new Class1[2]; 是实例化了一个数组
这一句如何理解呢?
是实例化 class2可是左边是class1呀,如何理解呢?我有点晕了
谢谢,这确实是实例化一个 Class1 数组,但是数组元素明明就是 Class1 呀。
数组元素是Class1没错,但是哪里有实例化 Class1了?
实例化了一个Class1 数组,里面的元素都是null啊
而且基类类型的变量,可以指向派生类的变量的
这个是多态性的最基本实现方式
Class1 obj1 = new Class2();
这样写也是一样的
Class1[] obj = new Class1[2];
1.定义一个大小为2且类型为Class1的数组,每个数组元素为NULLobj[0] = new Class2("aaaa");
obj[1] = new Class2("bbbb");2.分别为数组初始化为Class2定义数组时只是在分配内存而非实例化抽象类Class1
并没有实例化Class1。
如果代码编程这样
int[] ii = new int[2];
楼主就明白了吧,这里的int和class1是一样的,你总不能说int就是具体的1 2 3 4吧,他仅仅是类型而已。