子类继承父类的属性值但是父类的属性值并不适合子类的需要,就需要多态。
子类只能重写(override)父类允许修改的属性,也就是父类中有虚拟属性(virtual)的属性。
每个类都可以是其他类的子类也可以是其他类的父类。
bird b = new bird();
plane p = new plane();
owl o = new owl();
Console.WriteLine(b.flying());
Console.WriteLine(p.flying());
Console.WriteLine(b.eat());
Console.WriteLine(o.eat());
Console.ReadKey();
public class fly
{
public virtual string flying() { return "i can fly"; }
}
public class bird:fly
{
public override string flying()
{
return "拍下翅膀就能飞";
}
public virtual string eat() { return "要吃东西"; }
}
public class plane:fly
{
public override string flying()
{
return "有引擎才能飞";
}
}
public class owl:bird
{
public override string eat()
{
return "要吃肉";
}
}
Plane跟bird是fly 的子类,分别重写了fly里的flying(),owl是bride的子类,重写了eat()。Bird里的eat 是父类里没有的。
普通的类中所有的方法都变成虚方法,没有人用最基础的方法,全部都需要重写,那么就不需要那么费劲把普通类中的方法主体都写完,而是,直接定义成抽象类,并且都写成抽象方法。
只声明方法的名称和返回类型,具体方法主体是什么,继承过去以后自己去实现。
抽象方法一定是在抽象类中
有抽象方法的类,一定是抽象类抽象类中不一定只有抽象方法
抽象类,抽象类就是为了被继承而出现的。当子类中的属性都需要重写时,父类可以写成抽象类。抽象类的关键字是abstract。抽象类不需要明确的和函数体。
public abstract class ren
{
public abstract string shuijiao();
public abstract string chifan();
public virtual string xingwei()
{
return "有行为动作";
}
}
接口:interface
就是让类更加完善
都是抽象方法,不能有一点实在东西,全部内容都需要在子类中进行实现
接口的关键字是interface
public interface yule
{
string youxi();
string dianying ();
}
不需要class,也是虚方法,返回类型之前的访问修饰符也不用写。所有的在子函数中声明。
public class nanren:ren ,yule {
public override string chifan()
{
return "大口吃饭";
}
public override string shuijiao()
{
return "在床上睡";
}
public string youxi()
{
return "lol";
}
public string dianying()
{
return "爵迹";
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 抽象类_接口
{
class Program
{
static void Main(string[] args)
{
nanren n = new nanren();
Console.WriteLine(n.youxi());
Console.ReadLine ();
}
}
}