添加Lesson18
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<RootNamespace>Lesson18_多态_抽象类和抽象方法</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,77 @@
|
||||
namespace Lesson18_多态_抽象类和抽象方法
|
||||
{
|
||||
#region 知识点一 抽象类
|
||||
//概念
|
||||
//被抽象关键字abstract修饰的类
|
||||
//特点:
|
||||
//1.不能被实例化的类
|
||||
//2.可以包含抽象方法
|
||||
//3.继承抽象类必须重写其抽象方法
|
||||
|
||||
abstract class Thing
|
||||
{
|
||||
//抽象类中封装的知识点都可以用
|
||||
public string name;
|
||||
//可以在抽象类中写抽象函数
|
||||
}
|
||||
class Water : Thing
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 知识点二 抽象函数
|
||||
//又叫 纯 虚方法
|
||||
//用abstract关键字修饰的方法
|
||||
//特点:
|
||||
//1.只能在抽象类中声明
|
||||
//2.没有方法体
|
||||
//3.不能是私有的
|
||||
//4.继承后必须实现 用override重写
|
||||
abstract class Fruit
|
||||
{
|
||||
public string name;
|
||||
public abstract void Bad();//抽象方法 是一定不能有函数体的(大括号什么的)并且在子类中必须重写
|
||||
public virtual void Test()//虚方法可以不重写
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
class Apple : Fruit
|
||||
{
|
||||
public override void Bad()
|
||||
{
|
||||
Console.WriteLine();
|
||||
}
|
||||
}
|
||||
class SuperApple : Apple
|
||||
{
|
||||
public override void Bad()
|
||||
{
|
||||
base.Bad();
|
||||
}
|
||||
public override void Test()
|
||||
{
|
||||
base.Test();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
internal class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
//抽象类不能被实例化
|
||||
//Thing t = new Thing();
|
||||
|
||||
//遵循里氏替换原则
|
||||
Thing water = new Water();
|
||||
}
|
||||
}
|
||||
//总结:
|
||||
//如何选择普通类和抽象类?
|
||||
//不希望被实例化的对象,比较笼统的对象
|
||||
//例如:水果,人,事情
|
||||
//或 父类中的行为不太需要被实现的,只希望子类区定义具体的规则的
|
||||
//可以选择抽象类
|
||||
}
|
||||
Reference in New Issue
Block a user