个性签名怎么隐藏(qq签名个性签名怎么隐藏)

个性签名怎么隐藏(qq签名个性签名怎么隐藏)

方法隐藏是指通过重新实现来改变父类的方法在子类中的行为。

根据定义,我们所做的只是隐藏或隐藏或更好地“忽略”父类方法。

等一下!!这正是方法覆盖的内容。那么,如果它具有相同的目的,为什么我们甚至需要方法隐藏呢?这就是我们将在本文中回答的问题。

这是多态性系列的第 3 部分,我们将深入探讨多态性。以下是拼图的 3 个部分。

  1. 编译时多态性
  2. 运行时多态性
  3. 方法隐藏/阴影

注意:方法覆盖和方法隐藏的方法签名应该完全相同。

首先,我们将看到这两者之间的实现差异,然后我们将看到操作差异。

实现差异

  1. 在方法覆盖中,只允许在子类中覆盖虚拟或抽象方法,但在方法隐藏的情况下,子类可以重新实现父类的任何方法,无论是虚拟还是抽象。
  2. 关键字 override 用于被覆盖的方法,其中关键字 new 用于隐藏方法。

让我们一步一步来破解这个难题,让我们创建一个 Vehicle 类,它有一个虚拟方法 Speed() 和另一个普通方法 SetFuelType()。

public class Vehicle
{
    public virtual string Speed()
    {
        return "Vehicle's speed is 10 Mph";
    }

    public string SetFuelType()
    {
       return "Vehicle runs on Diesel";
    }
}

如果我现在使用父对象运行项目,我将得到以下输出。

个性签名怎么隐藏(qq签名个性签名怎么隐藏)

让我们创建一个子类 Car 来重新实现这两个方法。

public class Car : Vehicle
{
    //Method Override
    public override string Speed()
    {
        return "Car's speed is 20 Mph";
    }

    //Method Hiding
    public new string SetFuelType()
    {
        return "Car runs on Petrol";
    }
}

现在看看会发生什么,当我用子类的对象调用这些方法时。

个性签名怎么隐藏(qq签名个性签名怎么隐藏)

子对象调用自己重新实现的方法。

还有一点需要注意,关键字 new 是可选的,但如果你没有使用它,那么编译器会抛出一个警告。

个性签名怎么隐藏(qq签名个性签名怎么隐藏)

警告:“Car.SetFuelType()”隐藏了继承的成员“Vehicle.SetFuelType()”。 如果打算隐藏,请使用 new 关键字。

现在,您可能会问覆盖和隐藏之间的具体区别是什么,因为我们看到它们在做完全相同的事情,但使用不同的方法。

操作差异

当我们尝试使用子类对象调用父类方法时,差异就出现了。

有两种方法可以在子类中引用父类。

1. 在子类中使用 base 关键字,查看清单 3 中的第 19 行和第 25 行。

public class Vehicle
{
    public virtual string Speed()
    {
        return "Parent: Vehicle's speed is 10 Mph";
    }

    public string SetFuelType()
    {
        return "Parent: Vehicle runs on Diesel";
    }
}

public class Car : Vehicle
{
    //Method Override
    public override string Speed()
    {
        return  base.Speed();
    }

    //Method Hiding
    public new string SetFuelType()
    {
        return base.SetFuelType();
    }
}

在下图中,您可以看到子类汽车的实例如何调用其父类汽车的实现。

个性签名怎么隐藏(qq签名个性签名怎么隐藏)

2. 第二种方式,这就是一切开始变得阴暗的地方。

您可以使用父类引用变量来存储子类对象。

像这样的东西。

Vehicle parent = new Car();

这个引用变量将可以访问所有属于父类的方法,但是在访问子类的成员时,它不能调用除被覆盖的方法之外的任何纯子类成员函数的方法。

public class Vehicle
{
    public virtual string Speed()
    {
        return "Parent: Vehicle's speed is 10 Mph";
    }

    public string SetFuelType()
    {
       return "Parent: Vehicle runs on Diesel";
    }
}

public class Car : Vehicle
{
    //Method Override
    public override string Speed()
    {
        return "Child: Car's speed is 20 Mph";
    }

    //Method Hiding
    public new string SetFuelType()
    {
        return "Child: Car runs on Petrol";
    }
}

您可以在清单 4 中看到,第 17 行的方法 Speed() 是 Car 类中的一个重写方法。 在图 4 中,父类 Vehicle 的引用变量正在调用子类 Car 的 Speed() 覆盖版本。 根据我们上面的规则,它按预期工作,“它不能调用任何子类的纯成员函数,除了被覆盖的方法。”

接下来要在清单 4 中观察,第 23 行的方法 SetFuelType() 是 Car 类中的隐藏方法。 在图 4 中,父类 Vehicle 的引用变量忽略了子类 Car 的实现并调用父类 Vehicle 的 SetFuelType() 版本。

个性签名怎么隐藏(qq签名个性签名怎么隐藏)

注意:带有 new 关键字的方法被认为是纯成员函数,因为 new 关键字隐藏了父方法,现在它属于子方法。 在清单 5 中,我将第 17 行处的 Speed() 方法的关键字从 override 更改为 new。现在它将被视为 Car 类的纯定义方法。

public class Vehicle
{
    public virtual string Speed()
    {
        return "Parent: Vehicle's speed is 10 Mph";
    }

    public string SetFuelType()
    {
       return "Parent: Vehicle runs on Diesel";
    }
}

public class Car : Vehicle
{
    //Method Hiding
    public new string Speed()
    {
        return "Child: Car's speed is 20 Mph";
    }

    //Method Hiding
    public new string SetFuelType()
    {
        return "Child: Car runs on Petrol";
    }
}
个性签名怎么隐藏(qq签名个性签名怎么隐藏)

结论

父类可以有虚方法或它自己的纯成员函数。 当父类在图 4 中的子类中进行类型转换时,

在 Overriding 中,它跳过了虚拟方法并调用了子类覆盖的方法,这就是为什么在图 4 中调用了 child 的 speed() 方法。

在方法隐藏的情况下,它首先在自身中查找纯成员函数,如果找到则跳过带有 new 关键字的子类隐藏方法,这就是为什么在图 4 中调用了父类的 SetFuelType() 方法。

注意:如果虚方法没有任何被覆盖的方法,那么如果没有找到被覆盖的实例,父类将调用它自己的方法。

免责声明: 文章源于会员发布,不作为任何投资建议

如有侵权请联系我们删除,本文链接:https://www.sws100.com/baike/381087.html

(0)
鸟叔鸟叔
上一篇 2023年 4月 27日
下一篇 2023年 4月 27日

相关推荐

  • 微商最近火的减肥咖啡(微商最近火的减肥咖啡叫什么)

    “减肥咖啡一盒见效”!河池微商余某在朋友圈销售减肥咖啡,消费者侯先生购买后却发现咖啡中含有国家明令禁止添加的物质“西布曲明”。南丹市场监管部门调查发现,该咖啡无合格证明,外包装上标注的生产厂家并不存在。7月13日,该起微商利用网络销售有毒、有害食品案件被移交警方侦办。 5月24日,南丹县市场监管局接到消费者侯先生通过全国12315平台举报称,其花1980元从…

    2022年 10月 21日
  • 杜牧是哪个朝代的诗人(王安石是哪个朝代的诗人)

    《清明》是否为晚唐著名诗人杜牧所作,歧见纷纭。唐代文学学会会长陈尚君教授声称,《清明》“应该是南宋后出现于民间,到《千家诗》方附会给杜牧”(《唐诗求是》)。2020年4月,在接受《南方人物周刊》采访时,陈尚君重申旧说——“此诗写于宋代”(《〈全唐诗〉49403首,伪诗很多》,《南方人物周刊》第9期),理由有二:一是杜牧文集及《全唐诗》中均未收此诗,二是唐人重…

    2023年 4月 12日
  • 晚上发面第二天蒸行吗(自发面粉晚上发面第二天蒸行吗)

    如何在晚上发面早上用?教你冷藏发酵的详细做法,不愁没早饭吃了。哈喽,大家好,我是大厨江一舟,今天又到了和大家分享美食的时刻了,你准备好了吗? 一天之计在于晨,早餐这一顿饭是非常重要的。对于家庭主妇来讲,每天早上起早做一顿丰富的早餐真的是一件特别辛苦的事。为了能让自己在早上的时候多睡一会,很多聪明人都会晚上发一些面团,这样这样早上烙饼或者是蒸花卷的时候就不愁没…

    2022年 10月 10日
  • 铝合金和铝的区别(铝镁合金和铝合金哪个好)

    铝通常被称为纯铝或电解铝,铝合金是纯铝加镁、铜、锰、硅、锌等元素的合金材料,统称为铝合金。铝一般用于电线电缆行业,铝合金广泛应用于工业中,如工业中的各种铝型材,加入合金后硬度增加。铝合金分为铝镁合金、铝锌合金、铝铜合金等1-9种合金铝。铝镁锌合金是一种用于飞机制造和航天工业的高强度铝合金。现在,随着汽车工业的发展,汽车排量低的车型已经成为未来的趋势,这促进了…

    2023年 5月 6日
  • 星露谷物语钓鱼(星露谷物语钓鱼图鉴)

    《星露谷物语》大家都是什么流派开局呢?今天就为大家带来了星露谷物语钓鱼流开局玩法技巧与心得解析,教给大家钓鱼流怎么玩没还不会的同学可以尝试下,一起来看星露谷物语钓鱼流怎么开局吧。 钓鱼开局 我目前最好成绩是:10天近4W块 ,2个5000的财宝,7、8颗钻石,3个1000的娃娃,3级背包,满级钓竿,10个+2、+3钓鱼食物,10多个鱼饵。 这个号是完全放弃种…

    2023年 2月 27日

联系我们

在线咨询: QQ交谈

邮件:k37759@foxmail.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信