多态
实现多态的三种方法,虚方法,抽象类,接口
虚方法(Virtual)
class pp
{
static void Main(string[] args)
{
Student s = new Student();
Teacher t = new Teacher();
person [] p = {s,t};
for(int i = 0; i < p.Length; i++)
{
p[i].CHLSS();
}
}
}
public class person
{
public Virtual void CHLSS()
{
Console.WriteLine("人类");
}
}
public class Student : person
{
public override void CHLSS()
{
Console.WriteLine("学生");
}
}
public class Teacher : person
{
public override void CHLSS()
{
Console.WriteLine("老师");
}
}
抽象类(abstract)
抽象方法是没有方法体的
抽象类不能创建对象
class pp
{
static void Main(string[] args)
{
person p = new Student();
p.CHLSS();//调用的依然是person的CHLSS 但是其被子类Student的CHLSS重写了所以会打印学生
}
}
public abstract class person
{
public abstract void CHLSS();
}
public class Student : person
{
public override void CHLSS()
{
Console.WriteLine("学生");
}
}
public class Teacher : person
{
public override void CHLSS()
{
Console.WriteLine("老师");
}
}
接口
接口中的成员不能有字段和构造函数(只有方法和属性---自动属性,索引器)
类继承接口 必须要实现接口的全部成员
接口不能继承类
接口中的成员不允许添加访问修饰符,默认public
接口可以多继承 (类是不可以多继承的)
接口不能被实例化(虚方法,抽象类都不可以被实例化 就是创建对象)
如果一个类A继承了类B又实现了接口C,那么在类A写继承时B必须写在C前面 (Class A : B,C { })
class pp
{
static void Main(string[] args)
{
person p = new Student();
p.CHLSS();
}
}
public interface person
{
void CHLSS();
}
public class Student : person
{
public override void CHLSS()
{
Console.WriteLine("学生");
}
}