继承:属于面向对象三大特性之一
基类:父类 Animal
派生类:子类 Dog
子类可以使用父类的属性和方法,同时也可以拓展自己的特性
如:动物类 ,会跑 ,会叫,
狗类:会吃骨头(特性)
格式:
public class Animal
{
publc int Id{get;set;}//声明字段
public string Name{get;set;}//声明字段
//后面可以加父类的方法
}
public class Dog:Animal
{
//可以直接写拓展的属性 方法
}
虚方法:
当父类中的方法与子类中的方法命名一样时:
这里需要注意,和父类中公开的被用作继承的方法重名了,会覆盖掉父类中的方法转而调用自身的
关键词:
父类:virtual 子类: override
格式:
//父类:
public virtual void Eat(string food)
{
consolo.WriteLine($"{food}")
}
//子类:
public override void Eat(string food)
{
consolo.WriteLine($"{food}")
}
关键字:base
//base()代表父类的构造参数,加上参数就是访问父类的有参构造函数
public Dog(int id,string name,int age):base(id,name)
{
Age=age;
}
例题:
public class Bird//父类
{
//构造函数
public string Cb;
public string Liatui;
public string Bizi;
public Bird(string cb,string liatui,string bizi)
{
//this.可以省略
this.Cb = cb;
Liatui = liatui;
Bizi = bizi;
}
}
public class Maque : Bird //子类
{
public int Age;//构造麻雀特有属性
//base()方法
public Maque(string cb, string liatui, string bizi,int age) : base(cb, liatui, bizi)
{
Age = age;
}
}
静态类:
使用static关键字放在class关键字前
特点:
1.不需要被实例化
2.静态类中不能有实例的构造参数
3.静态类默认是封闭的 所以不能被继承
建议:一般在静态类中,静态方法较多,静态属性用的少
密封类:
关键字:sealed
特点:
1.不能扩展,不能被继承,但是可以继承其他的普通类
2.密封类中的成员,既可以是实例成员,也可以是静态成员
3.能够被实例化,可以有实例构造函数
抽象类:
关键字:abstract
抽象类的核心是预先定义一部分内容,让子类去实现,可以理解为现实中的“合约”,好处是:拓展程度更高,更适合代码的进阶
抽象方法只能定义,不能实现,不能拥有方法体,谁继承自该类,谁必须实现
继承自抽象类之后要把抽象类中抽象方法或属性实现,否则会报错
抽象方法和虚方法之间的区别:抽象方法是一个“隐藏”的虚方法,没有方法体,但是又能override,虚方法可以在普通类,抽象方法只能在抽象类