在学习抽象类的时候,第一条就是抽象类是不能被实例化的,但是为什么我在写一下程序时实例化没有问题呢?
using System;
abstract class Employee
{
protected string _name;
protected Employee() {}
protected Employee(string name)
{
this._name=name;
}
public abstract void StartWork();
}
class Manager:Employee
{
public Manager(string name):base(name) {}
public override void StartWork()
{
Console.WriteLine(_name+"经理安排工作");
}
}
class Secretary:Employee
{
public Secretary(string name):base(name) {}
public override void StartWork()
{
Console.WriteLine(_name+"秘书协助经理安排工作");
}
}
class Seller:Employee
{
public Seller(string name):base(name) {}
public override void StartWork()
{
Console.WriteLine(_name+"销售员销售商品");
}
}
class Accountant:Employee
{
public Accountant(string name):base(name) {}
public override void StartWork()
{
Console.WriteLine(_name+"会计管理公司财务");
}
}
class Test
{
static void Main()
{
Employee[] emp=new Employee[5];//此处为什么Employee可以new实例化?????
emp[0]=new Manager("Angelo.Pan");
emp[1]=new Secretary("小美");
emp[2]=new Seller("张三");
emp[3]=new Seller("李四");
emp[4]=new Accountant("钱六");
Console.WriteLine("早上九点,开始上班!");
foreach(Employee e in emp)
e.StartWork();
}
}
using System;
abstract class Employee
{
protected string _name;
protected Employee() {}
protected Employee(string name)
{
this._name=name;
}
public abstract void StartWork();
}
class Manager:Employee
{
public Manager(string name):base(name) {}
public override void StartWork()
{
Console.WriteLine(_name+"经理安排工作");
}
}
class Secretary:Employee
{
public Secretary(string name):base(name) {}
public override void StartWork()
{
Console.WriteLine(_name+"秘书协助经理安排工作");
}
}
class Seller:Employee
{
public Seller(string name):base(name) {}
public override void StartWork()
{
Console.WriteLine(_name+"销售员销售商品");
}
}
class Accountant:Employee
{
public Accountant(string name):base(name) {}
public override void StartWork()
{
Console.WriteLine(_name+"会计管理公司财务");
}
}
class Test
{
static void Main()
{
Employee[] emp=new Employee[5];//此处为什么Employee可以new实例化?????
emp[0]=new Manager("Angelo.Pan");
emp[1]=new Secretary("小美");
emp[2]=new Seller("张三");
emp[3]=new Seller("李四");
emp[4]=new Accountant("钱六");
Console.WriteLine("早上九点,开始上班!");
foreach(Employee e in emp)
e.StartWork();
}
}
解决方案 »
- 关于多线程应用程序设计思路
- C#软件设计(WinForm)、.net、ASP.NET到底什么关系?
- 动态增加sql的select条件
- char byte decimal long sbyte short uint ulong ushort数据类型用来存放什么样的数据?能举几个例子吗谢谢
- sql语句关联问题(急)
- 不解,关于WINFORM简单的窗口问题
- 帮忙看下,这段怎么用c#写.急用.
- reportview 报表中 2个字符串相连接 如何相连 ?
- (用c#怎么做)通过关键字查询,可以快速得到当前网站的关键字在Baidu/Google收录的排名情况!
- 关于dataset,请思归等高手讨论一下如何充分利用他来提供性能。~~~~~~~~~~~~~
- 请问C#哪个控件可以制作这样的工具栏?
- 一个登入界面
这句说只是定义一个数组,还没有实例化。
emp[0]=new Manager("Angelo.Pan");
emp[1]=new Secretary("小美");
emp[2]=new Seller("张三");
emp[3]=new Seller("李四");
emp[4]=new Accountant("钱六");
Console.WriteLine("早上九点,开始上班!");
楼主你这样写很让人郁闷啊!~
跟你说当多个子类继承一个父类的时候
应该考虑用简单工厂啦!~~
给你写个简单工厂!~
你定义的emp是什么类型你知道么?
MessageBox.Show(emp.GetType().ToString());看看吧。
不是你的抽象类。你定义了一个数组。
new Employee() // 实例化Employee,不允许。
new的时候才会实例化
如:申明一个抽象类.并不能把这个类来创造某个具体的物体来,只有派生一个
这个回答很深入,你显示类型,将是Array!
public class abuteaFactioy
{
private static Employee CreateFeed(string type)
{
Employee employee = null;
switch (type)
{
case "Manager":
employee = new Manager();
break;
case "Secretary":
employee = new Secretary();
break;
case "Seller":
employee = new Seller();
break;
case "Accountant":
employee = new Accountant();
break;
}
return employee;
}
}