class Program
{
static void Main(string[] args)
{
NiaoClass niao = new NiaoClass(); 不能直接实例化抽象类
YanZi yanzi = new YanZi();
NiaoClass niao = yanzi;//通过引用子类的 实现抽象类的普通方法
niao.Fei();//通过引用子类的 实现抽象类的普通方法
NiaoClass niao = new YanZi();//用父类去实例 子类引用父类的方法;
yanzi.MingJiao();
yanzi.Eatting();
niao.Eatting();
yanzi.Fei();
Dog dog = new Dog();//密封类不能被继承,不派生子类 可以实例化
dog.Pao();
Console.ReadKey();
}
}
/// <summary>
/// 密封类-不能当做父类被继承;但可以作为子类去继承别的类 可以抽象方法;
/// </summary>
sealed class Dog//密封类不能被继承,不派生子类 可以实例化 但可以作为子类继承别的父类 可以写抽象方法
{
public void Pao()
{
Console.WriteLine("狗跑le!");
}
}
abstract class NiaoClass
{
private string name;
private int age;
private string sex;
private int weight;
private int height;
public abstract int Weight
{
get;
set;
}
public abstract string Name
{
set;
}
public int Age
{
get { return age; }
set { age = value; }
}
public string Sex
{
get { return sex; }
set { sex = value; }
}
public NiaoClass(string _name, int _age, string _sex)
{
this.name = _name;
this.age = _age;
this.sex = _sex;
}
public NiaoClass()
{ //加 abstract看看
//构造函数不能被static 和 abstract 修饰
}
public abstract void MingJiao();//抽象类中的抽象的方法不能有方法体 就是没有大括号 不能设置为私有的 private 可以受保护的,protect 子类继承也要修改修饰符
public void Fei()
{
Console.WriteLine("燕子飞了!!");
}
public static void Eat()
{//加 abstract看看
Console.WriteLine("鸟吃虫子!");
}
public abstract void Eatting();
}
class YanZi:NiaoClass
{
public override void MingJiao()
{
Console.WriteLine("燕子叫了:吱吱吱··");
}
public new void Fei()
{
Console.WriteLine("鸟飞了!!");
}
public override void Eatting()//属性可以抽象
{
Console.WriteLine("燕子吃到虫子了");
}
public override string Name
{
set
{
Name = value;
}
}
public override int Weight
{
get
{
return Weight;
}
set
{
Weight = value;
}
}
}