个性签名怎么隐藏(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日

相关推荐

  • 美国大片电影推荐(美国大片前十排行榜)

    我知道我知道!现在已经是2020年3月了,2020年已经过了六分之一还有多一些! 那我为何还要做2020年专题!第一因为最近片荒。第二对于好莱坞来说,其实1月和2月是颁奖季,基本就是淡季,好片大片都还没上。第三是疫情影响,很多影片撤档和延后,所以现在做这个专题,还不算晚啦! 今天这期为大家带来2020年最值得推荐和期待的外语片。 为了大多数人的口味,这次主要…

    2023年 6月 1日
  • 四驱suv车型大全(柴油四驱suv车型大全)

    很多看官留言不会选四驱车,想了解各种SUV四驱机构的特点,安排!就像动物一样,四条腿跑肯定比两条腿跑稳当,想想看,当脚底特别滑,或者要爬特别陡的坡,你是不是也有想四脚着地的冲动?具有四驱能力的汽车也一样,适时四驱和全时四驱车型在必要的时刻,能主动将发动机的动力分配到相关车轮上,使车辆脱困或者提升操控性。虽然我们在SUV的车尾都能看到4WD、AWD等标识,但不…

    2023年 3月 23日
  • 琉璃和玻璃的区别(现代琉璃和玻璃的区别)

    今天小编和朋友无意间聊起琉璃和玻璃它们有什么区别?朋友说的是这只是,一个是古代玻璃一个是现代玻璃二者没有啥区别。而小编觉得不对,如果都是玻璃,为什么现代社会我们还在做琉璃呢?特别是佛庙的吉祥物和很多的琉璃工艺品。 带着这个疑问,小编到网上搜索学习了下。学习之后觉得有以下几点区别跟大家分享下。 第一,玻璃和琉璃从成分上来说都是二氧化硅组成。但是它们的区别在于玻…

    2023年 5月 6日
  • 2022年初中期末考试时间(2022年初中期末考试时间表)

    钱江晚报·小时新闻记者 金丹丹 沈蒙和 临近期末,家长们最关心的是什么时候期末考试?什么时候放暑假? 钱江晚报·小时新闻记者了解到,部分城区的期末考时间已经定了。 上城区 小学4-6年级 中学7-8年级 6月28日、29日 拱墅区 小学:6月23日至24日 初中:6月27日至28日 滨江区 小学(4-6年级):6月23日至24日 初中:6月27日至28日 西…

    社会百科 2022年 11月 20日
  • 凉拌黄瓜的调料配方(炝黄瓜的做法)

    凉拌黄瓜的方法N多种,最近又尝试了一种极香的做法。假日去逛菜市场看到一个“凉拌汁”,这个是专门用来拌凉菜的,不知道大家以前有没有用过这东西,我也是第一次看到,买了一瓶回家,赶紧的拌了个黄瓜试了试,不过因为第一次用,我还是比较谨慎,少放了一点,味道挺鲜的,然后我又加了自己做的花生米,真的是又香又鲜呀! 食材:黄瓜1根、大蒜、食盐、白糖、生抽、香醋、香菜、花生米…

    2023年 3月 24日

联系我们

在线咨询: QQ交谈

邮件:k37759@foxmail.com

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

关注微信