抽象类和虚方法
一,抽象类
1,抽象类: 用于提供类的部分成员实现
动态多态表现:抽象
2,抽象类包含抽象方法也可以是普通方法 ,如果抽象方法不用去实现,谁继承这个抽象谁去实现抽象方法
3,抽象类里面也可以定义抽象成员, 如果是抽象成员。 需要在派生类里面去实现成员
4,定义抽象People类:public abstract class People{}
5,抽象方法不能有方法体 不能加{}, 抽象属性 不能赋值
6,重写抽象成员和抽象方法,重写关键字 override
相关代码:
public abstract class People
{
public int Age { get; set; } = 10;//普通属性
//public abstract string Name { get;set; } = "上海"; //抽象属性 不能赋值
public abstract string Name { get; set; }
//普通方法可以正常定义和实现
public void Eat()
{
Console.WriteLine("吃相难看");
}
//抽象方法不能有方法体 不能加{}
public abstract void SayHello(int age);
}
7,定义一个派生类:
//在子类实现抽象成员
public class China : People
{
//需要重写抽象成员和抽象方法
//重写关键字 override
public override string Name { get; set; } = "余伟";
public override void SayHello(int a)
{
Console.WriteLine("你好,吃了吗");
}
8,定义第二个派生类:
}
public class Japan : People
{
public override string Name { get; set; }
public override void SayHello(int a)
{
Console.WriteLine("扣你吉瓦");
}
}
}
9,最后调用输出:
二,虚方法
1,抽象方法和虚方法的区别
【1】,抽象成员和抽象方法只能定义在抽象类里面,但是虚方法和虚成员可以定义在普通类里面
【2】,抽象方法和抽象成员在抽象类里面不能实现 但是虚方法和虚成员可以定义在普通类里面实现
【3】,抽象方法和抽象成员在派生类里面必须实现 但是虚方法和虚成员可以不用在派生类里面实现
【4】, 可以使用override重写基类的抽象方法或者虚方法
2,添加virtual关键字 使方法变成虚方法 虚方法可以定义在普通类中, 并且可以实现
3,相关代码
定义一个People类和Eat方法定义两个派生类
最后调用输出:
三,密封类和静态类
1,static class 静态类: 添加静态成员 不能new实例化
2,sealed class 密封类,特点不能被继承
3,密封类是不允许被继承的,虚方法设计的目的就是为了在子类重写这个方法,两者设计理念相违背
4,静态类: 添加静态成员 不能new实例化
static class B
{
public static int Age { get; set; }
public static void Eat()
{
Console.WriteLine("ooo");
}
}
sealed 密封类,特点:不能被继承
sealed class A
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine("吃东西");
}
5,静态类密封类的使用:
//密封类的使用
A a = new A();
a.Name = "好";
a.Eat();
//静态类的使用
B.Age = 10;
B.Eat();
"上文为本次第十四部分内容,后续将不定时更新,若对主题感兴趣,欢迎订阅获取更新通知."