面向对象4-3多态性

时间:2023-02-24 18:58:42

一、virtual(虚拟的)  override(覆盖)

根据上一篇得知,fly是bird父类,在bird中引用父级中的方法fly1(),返回值为"我可以飞"。但是在bird类中,引用父类的fly1()方法不能满足要求,需要返回的输出值为“我可以靠自己的翅膀飞行”。以此类推,在fly的各种子类中,都想表达出子类自身所具有的特征,那么此时,就需要对父类fly的方法进行修改,需要进行设置虚函数(virtual)。

//父类格式
public virtual 数据类型 名字()
{
执行语句
}
//子类中
public override 数据类型 数据名()
{
新的执行语句
}
//此时重新调用父类中的方法,就会显示新的执行语句!

1,同样都是继承了同一个父类,但父类中的方法并不适用任何一个子类,那么在这就需要重新编写这个方法的主体。

(1)需要父类同意子类可以重新编写自己的方法,关键词:virtual,在public之后

(2)子类只能重新写父类允许重写的方法,只能重写虚方法。关键词override,在public之后。

2,所有的类都可以当做父类,都可以有虚方法。

二、接口 interface

抽象类函数,关键词;abstract。抽象函数不能实例化。需要被继承,在子类里面调用其方法。

举例子吧

建立ren类

//在ren类里面设置虚函数
        public abstract string chi();       //注意,没有“{执行语句}”,因为即使写了,在子类中也不引用,需要再子类中重新编写
        public abstract string shui();
        public abstract string dong();
        public string yue()                  //不是抽象方法,为了证明抽象类里面也可以有非虚类函数
        {
            return "约会去了!!";
        }
        public virtual string yuyan()       //不是抽象方法,为了证明抽象类里面也可以有虚类函数
        {
            return "我会说hua!";
        }

 

抽象类函数就是为了被继承而出现的(他的建立就是为了当父类)。

普通的类中所有的方法都变为虚方法,没有人用最基础的方法(父类方法),在子类中需要重新编写,那么就不需要那么费劲的把普通类中的方法全部写完,于是,直接定义为抽象类,并且都写成抽象方法。

只声明方法的名称和返回值,具体方法是什么,继承过去以后自己(在子类中)去实现。

//新建一个nan类,继承ren类
public class nan:ren
    {
        public override string chi()   //跟virtual一样用override
        {
            return "大口大口的吃!";
        }
        public override string shui()
        {
            return "在女人身边睡觉!";
        }
        public override string dong()
        {
            return "打篮球";
        }
//然后在main函数里面实例化nan,就可以调用nan和ren里面的函数了。

抽象方法一定在抽象类中。

有抽象方法的类,一定是抽象类。

抽象类中不一定只有抽象方法,也可以由其他的方法。

 

为了让nan这个类更加完善,还需要继承其他的类(如yule,gongzuo),那就需要接口了。

父类只能有一个,其余的都是借口。就像亲爹(父类)只有一个,其余的为干爹(接口interface)。

//新建gongzuo类
public interface gongzuo  //interface 原先位置为class。
    {
     string jineng();   //为抽象方法。数据类型+数据名字()。

     string didian();  
     

    }
//然后在nan类继承ren类的后面写个逗号,加上gongzuo,如下图,这样接口就好了。

面向对象4-3多态性

然后就需要在nan类里面写接口里面的方法(必须写)

public class nan:ren
    {
        public override string chi()   
        {
            return "大口大口的吃!";
        }
        public override string shui()
        {
            return "在女人身边睡觉!";
        }
        public override string dong()
        {
            return "打篮球";
        }
          public  string jineng() { return "巧妹子"; } public string didian() { return "夜色"; }
//在main函数里面调用就可以了。

接口类里面的方法都是抽象方法(数据类型+数据名字()),没有其他一点儿东西。全部内容需要全部在子类中实现(在子类中一个方法都不能少)。

 

完!!!