在学习抽象类的时候,第一条就是抽象类是不能被实例化的,但是为什么我在写一下程序时实例化没有问题呢?
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();
}
}

解决方案 »

  1.   

    抽象类不能实例化,指的是,你不能new一个抽象类,然后给他赋值为该抽象类的引用,你上面是定义一个抽象类型的数组,然后每个数组都是一个非抽象类的引用,你试试看这样就报错了:Emplyee emp=new Employee();
      

  2.   

     Employee[] emp=new Employee[5];
    这句说只是定义一个数组,还没有实例化。
      

  3.   

    Employee[] emp = new Employee[5]; // 此处并不是对Employee的实例化,而是声明有5个元素的数组。
      

  4.   

     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("早上九点,开始上班!");
    楼主你这样写很让人郁闷啊!~
    跟你说当多个子类继承一个父类的时候
    应该考虑用简单工厂啦!~~
    给你写个简单工厂!~
      

  5.   

    你new的是数组 不是类  new类就错了
      

  6.   

    Employee[] emp=new Employee[5];//此处为什么Employee可以new实例化?????
    你定义的emp是什么类型你知道么?
    MessageBox.Show(emp.GetType().ToString());看看吧。
    不是你的抽象类。你定义了一个数组。
      

  7.   

    new Employee[5] // 声明5个元素的数组,是允许的。
    new Employee()  // 实例化Employee,不允许。
      

  8.   

    抽象类不能实例化    
    new的时候才会实例化     
    如:申明一个抽象类.并不能把这个类来创造某个具体的物体来,只有派生一个
      

  9.   


    这个回答很深入,你显示类型,将是Array!
      

  10.   


    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;
            }
        }