抽象类不能实例化,
abstract class Person
{
public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
private string name; public string Name
{
get { return name; }
set { name = value; }
}
private int age; public int Age
{
get { return age; }
set { age = value; }
}
abstract public void SayHi();
}
class Student:Person
{
public Student(string name, int age)
: base(name, age)
{
}
public override void SayHi()
{
//throw new NotImplementedException();
Console.WriteLine("我是学生!!!");
}
}
Person[] p1 = {
new Student("张三",20),
new Teacher("老妖",20,1000),
new Student("李四",10)
};
foreach (Person item in p1)
{
if (item is Student)
{
Console.WriteLine("我是学生,耶!");
}
else if (item is Teacher)
{
Console.WriteLine("我是老师,我干!");
}
item.SayHi(); }
Console.Read();
问题:抽象类不能被实例化,为什么还可以调用构造函数,不是一旦调用构造函数,就实例化了吗
abstract class Person
{
public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
private string name; public string Name
{
get { return name; }
set { name = value; }
}
private int age; public int Age
{
get { return age; }
set { age = value; }
}
abstract public void SayHi();
}
class Student:Person
{
public Student(string name, int age)
: base(name, age)
{
}
public override void SayHi()
{
//throw new NotImplementedException();
Console.WriteLine("我是学生!!!");
}
}
Person[] p1 = {
new Student("张三",20),
new Teacher("老妖",20,1000),
new Student("李四",10)
};
foreach (Person item in p1)
{
if (item is Student)
{
Console.WriteLine("我是学生,耶!");
}
else if (item is Teacher)
{
Console.WriteLine("我是老师,我干!");
}
item.SayHi(); }
Console.Read();
问题:抽象类不能被实例化,为什么还可以调用构造函数,不是一旦调用构造函数,就实例化了吗
Person[] p1 = {
new Student("张三",20),
new Teacher("老妖",20,1000),
new Student("李四",10)
};
抽象类的构造函数不能直接调用,是在实例化子类的时候间接调用的,就是这句: base(name, age)
要不然构造函数也不会是轻轻松松写这么两行了。