C#之封装 ,继承,多态
程序员文章站
2022-05-29 09:56:38
...
一. 封装 // encapsulation
二.继承 // inheritance
直接看代码自己调试,继承中 一次只允许继承一个类
下面代码都是在一个命名空间(namespace)里的
static void Main(string[] args)
{
#region 继承 inheritance //C#中类是不能多重继承的
//父(基类) Animals //子 Dog 和 Cat //孙:LittleDog
//C#中类是不能多重继承的即C#中一次只允许继承一个类,不能同时继承多个类。
Dog dog = new Dog();
dog.Age = 12; //继承 子类中可继承基类的方法
dog.Bite(); //继承,父类中方法关键字有virtual,子类中可用override重写Bite方法
dog.GetAge(); //继承,子类可以获取基类中方法
dog.NoVirtual(); //继承 子class可以继承基类的方法
dog.BitMan(); //,如果 父类中无关键字virtual,则子类中不能用override
//new 的意思相当于在子类中隐藏,
Console.ReadLine();
LittleDog littledog = new LittleDog(); //C#中类是不能多重继承的
littledog.Age = 22; //继承 子类中可继承基类的方法
Console.WriteLine("littledog.GetAge");
littledog.GetAge();
Console.ReadLine();
Console.WriteLine("dog.GetAge");
dog.GetAge(); //继承,子类可以获取基类中方法
Console.ReadLine();
Cat cat = new Cat();
cat.Age = 33; //继承 子类中可继承基类的方法
Console.WriteLine("cat.GetAge");
cat.GetAge(); //继承,子类可以获取基类中方法
cat.Bite(); //继承,父类中方法关键字有virtual,子类中可用override重写Bite方法
Console.ReadLine();
#endregion
}
class Animals
{
public int Age { get; set; }
public virtual void Bite()
{
Console.WriteLine("Animal bite");
}
public virtual void GetAge()
{
Console.WriteLine(Age);
}
public void NoVirtual()
{
Console.WriteLine("No virtual");
}
public void BitMan()
{
Console.WriteLine("Animal bite man");
}
}
//sealed class Dog : Animals //会报错,提示错误“Struct.Program.LittleDog”: 无法从密封类型“Struct.Program.Dog”派生 D:\Projects\C#\Struct\Struct\Program.cs 316 15 Struct
class Dog : Animals
{
public override void Bite() //重写
{
Console.WriteLine("Dog Bite");
}
public new void BitMan() //如果不用new 则会有警告 warning :“Struct.Program.Dog.BitMan()”隐藏了继承的成员“Struct.Program.Animals.BitMan()”。如果是有意隐藏,请使用关键字 new。
{
Console.WriteLine("dog bite man");
}
}
class Cat : Animals
{
public override void Bite() //重写
{
Console.WriteLine("Cat Bite");
}
}
class LittleDog : Dog
{
public override void Bite() //重写
{
Console.WriteLine("ddd Bite");
}
}
运行结果:
三.多态