一.多态
多态(Polymorphism)按字面的意思就是“一个对象的多种状态
比如说是老师是老师,他也是人,也是丈夫或者妻子,或者光棍儿,这就阐述了多种形态
二.虚函数与复写和new
虚函数应用于基类中
复写和new用与派生类中,复写可以多次使用
虚函数:public virtual void Shoot() { Console.WriteLine("未知叫声"); }//虚函数
复写:public override void Shoot() { Console.WriteLine("{0}岁的"+base.Name + "汪汪",SetDate.Age); }
//override可以继续继承
public override void Shoot() { Console.WriteLine("{0}岁的" + base.Name + "喵喵", SetDate.Age); }
使用:dongwu dongwu1 = new Dog() {Name="小黑:" };
dongwu1.Shoot();
namespace ConsoleApp1
{
class SetDate
{
public int Age{ get;set; }
}
class dongwu//注意隐私数据仅自己可使用,protect可被其他使用
{
protected SetDate SetDate = new SetDate() { Age=1 };
public string Name { get; set; }//has a
//当dongwu自己有一个方法的华用base
public virtual void Shoot() { Console.WriteLine("未知叫声"); }//虚函数
}
class A {
//base访问基类的构造函数 this访问本类的构造函数
public A() { Console.WriteLine("A()"); }
public A(string a):this() { Console.WriteLine("A(string)"); }//调用上个A
public A(int a):this("123") { Console.WriteLine("A(int)"); }//调用上个A
}
class B : A
{
public B() : base("你好") { Console.WriteLine("B()"); }//base通过你输入的类型自动选择所要调用的基类构造函数
}
class Dog: dongwu //只能继承一个基类//is a
{
public override void Shoot() { Console.WriteLine("{0}岁的"+base.Name + "汪汪",SetDate.Age); }//override可以继续继承
//public new void Shoot() { Console.WriteLine("{0}岁的"+base.Name + "汪汪",SetDate.Age); }//不想使用复写
}
class Cat:dongwu
{
public override void Shoot() { Console.WriteLine("{0}岁的" + base.Name + "喵喵", SetDate.Age); }
}
class Program
{
static void Test(dongwu dongwu)
{
Console.WriteLine(dongwu.Name);
dongwu.Shoot();
}
static void Main(string[] args)
{
//Dog dog = new Dog() { Name = "小黑" };//属性
A a = new A(123);//先打印A();再A(string);再A(int)
B b = new B();//先调用基类构造函数后派送类
//
dongwu dongwu1 = new Dog() {Name="小黑:" };//调用了狗通过什么识别?利用virtual和override
Test(dongwu1);
dongwu dongwu2 = new Cat() { Name = "小黑:" };
Test(dongwu2);
dongwu1.Shoot();
//Console.WriteLine(dongwu1.Name);
}
}
}