实现多态的三种方式
多态:父类的对象用子类new,实现子类的方法。
一、接口
接口不能有实例成员;接口可以被多继承。
接口不能包含构造函数。
namespace jiekou
爱的魔法歌曲{
public interface ba1
{
void Func();//没有public
}
public class child1 : ba1
{
public void Func()
{
Console.WriteLine("child1.func");
}
}
public class child2:ba1
{
public void Func()
{
Console.WriteLine("child2.func");
}
}
public class child3 : ba1
{
public void Func()
{
Console网络歌曲大全流行歌曲.WriteLine("child3.func");
}
}
class Program
{
static void Main(string[] args)
{
ba1 b = new ba1();
双木不成林 ba1 b1 = new child1();
ba1 b2 = new child2();
b1.Func();
Console.Read();
}
}
}
二、重写(Virtual/)
virtual方法为孩子提供了选择,如果孩子选择override,那么它可以实现多态;如果选择new或者不写,那么就用老爸的函数。
namespace chongxie
{
public class ba2
{
public ba2()
{
Console.WriteLine("基类构造函数");
}
public virtual void Func()
{
Console.WriteLine("ba2.func");
}
}
public class child1:ba2
{
public override void Func()
{
Console.WriteLine("child1.func");
}
}
public class child2 : ba2
{
public override void Func()
{
Console.WriteLine("child2.func");
}
}
public class child3 : ba2
{
public new void Func()
{
Console.WriteLine("child3.func");
}
}
public class child4 : ba2
{
public void Func()
{
Console.WriteLine("child4.func");
}
}
class Program
{
static void Main(string[] args)
{
ba2 b = new ba2();
ba2 b1= new child1();
ba2 b2 = new child2();
ba2 b3 = new child3();t8钢
少见多怪 ba2 b4 = new child4();
Console.WriteLine("------------");
b.Func();
b1.Func();
b2.Func();
b3.Func();
b4.Func();
Console.Read();
}
}
}
三、抽象(abstract)
包含抽象方法的类一定得是抽象类,但抽象类中可以包含实例成员,这些实例成员也将遗传给儿子
抽象类不可以被实例化,但可以有构造函数,它的构造函数会在子类实例化的时候调用
namespace chouxiang
{
public abstract class ba3
{
public ba3()
{
Console.WriteLine("基类构造函数");
}
public abstract void Func();
public void method()
{
Console.WriteLine( "基类方法");
}
}
public class child1:ba3
{
public override void Func()
{
Console.WriteLine("child1.func");
}
}
public class child2 : ba3
{
public override void Func()
{
Console.WriteLine("child2.func");
}
}
public class child3 : ba3
{
public override void Func()
{
Console.WriteLine("child3.func");
}
无缘无故的反义词 }
class Program
普利斯特里
{
static void Main(string[] args)
戒指的戴法和意义
{
ba3 b1 = new child1();
ba3 b2 = new child2();
ba3 b3 = new child3();
Console.WriteLine("--------");
b1.Func();
b2.Func();
b3.Func();
Console.WriteLine("--------");
b1.method();
b2.method();
b3.method();
Console.Read();
}
}
}