实现多态方式
虚方法
方法上都是使用override关键字对父类方法进行重写,父类虚方法关键字是virtual
,是可以进行实现的
using System;
namespace dotnetLearn.类的继承.多态
{
public class Source
{
public string type;
public Source(string type)
{
this.type = type;
}
public virtual void loadTile()
{
Console.WriteLine($"{type} source load");
}
}
// 虚方法实现多态
public class VectorTileSource : Source
{
public VectorTileSource(string type) : base(type)
{
}
public override void loadTile()
{
Console.WriteLine($"{type} source load");
}
}
public class RasterTileSource : Source
{
public RasterTileSource(string type) : base(type)
{
}
public override void loadTile()
{
Console.WriteLine($"{type} source load");
}
}
public class Test
{
public static void testLoad()
{
Source source = new VectorTileSource("vector");
source.loadTile();
}
}
}
抽象类
子类方法上都是必须使用override
关键字对父类方法进行重写,区别抽象类不能实例化,抽象方法不能实现,抽象方法关键字是abstract
using System;
namespace dotnetLearn.类的继承.多态
{
public abstract class Bucket
{
public string type;
public Bucket(string type)
{
this.type = type;
}
public abstract void loadTile();
}
// 抽象类实现多态
public class LineBucket : Bucket
{
public LineBucket(string type) : base(type)
{
}
public override void loadTile()
{
Console.WriteLine($"{type} bucket load");
}
}
public class FillSource : Source
{
public FillSource(string type) : base(type)
{
}
public override void loadTile()
{
Console.WriteLine($"{type} bucket load");
}
}
public class Test01
{
public static void testLoad()
{
Bucket source = new LineBucket("line");
source.loadTile();
}
}
}
接口
接口方法默认是public,子类方法不需要加override
关键字
using System;
namespace dotnetLearn.类的继承.多态
{
public interface StyleLayer
{
void loadStyle();
}
public class LineStyleLayer : StyleLayer
{
public void loadStyle()
{
Console.WriteLine("line");
}
}
public class FillStyleLayer : StyleLayer
{
public void loadStyle()
{
Console.WriteLine("fill");
}
}
public class Test02
{
public static void testLoad()
{
StyleLayer layer = new FillStyleLayer();
layer.loadStyle();
}
}
}