永发信息网

请问一下 “C# 父类的静态方法可以被子类的静态方法覆盖”这句话对吗?

答案:2  悬赏:50  手机版
解决时间 2021-03-09 11:42
请问一下 “C# 父类的静态方法可以被子类的静态方法覆盖”这句话对吗?
最佳答案
基类静态方法不能被子类继承,所以不存在覆盖的说法
故“C# 父类的静态方法可以被子类的静态方法覆盖”是错的
全部回答
# 对方法的重载必须要显式声明,这个与 c++ 和 java 都不同。见下面的 c# 程序:     class plane     {         public double topspeed()         {             return 300.0d;         }     }     class jet : plane     {         public double topspeed()         {             return 900.0d;         }     }     class airport : ientrypoint     {         public void main()         {             plane plane = new jet();             console.writeline("planes top speed: {0}", plane.topspeed());         }     }  上面的程序很简单,在编译时会有警告:警告:“jet.topspeed()隐藏了继承的成员plane.topspeed()。如果是有意隐藏,请使用关键字 new。"e:\visualstudioproj\chouytest\learningcsharpbyexample\io\readfile.cs 92 17 learningcsharpbyexample 但结果却出乎意料地是: planes top speed: 300 很显然,它并没有调用子类的 topspeed 方法。原因是在 c# 中,方法如果想要被重载,必须显式地声明为 virtual,也就是虚方法。而继承类如果要重写此方法时,也必须显式地声明为 override ,这样才能覆盖父类方法。c# 代码如下:     class plane     {         public virtual double topspeed()         {             return 300.0d;         }     }     class jet : plane     {         public override double topspeed()         {             return 900.0d;         }     }     class airport : ientrypoint     {         public void main()         {             plane plane = new jet();             console.writeline("planes top speed: {0}", plane.topspeed());         }     }以上程序的输出结果是: planes top speed: 900 在 c# 中,如果一个方法允许子类覆盖,则必须要显式声明为 virtual 的(在 java 中,默认是 virtual 的),并且在子类里必须显式声明为 override。这两个关键子哪个也不能省。顺便再说一下另外的三个关键字:sealed、abstract、new。 在继承 abstract 类的 abstract 方法时,也必须声明方法为 override,abstract 方法的特性与 java 中的抽象类是一样的。sealed 关键字意思是密封的,相当于 java 中的 final,在类上使用是不可再被继承,在方法上使用是不可再覆盖;但还有一个例外,就是对方法使用 new 关键字声明。代码如下:   abstract class plane     {         public virtual double topspeed()         {             return 300.0d;         }     }     class jet : plane     {         public sealed override double topspeed()         {             return 900.0d;         }     }     class ufo : jet     {         public new double topspeed()         {             return 13000.0d;         }     }     class airport : ientrypoint     {         public void entrypoint()         {             ufo plane = new ufo();             console.writeline("planes top speed: {0}", ((plane) plane).topspeed());             console.writeline("planes top speed: {0}", ((jet) plane).topspeed());             console.writeline("planes top speed: {0}", ((ufo) plane).topspeed());         }     }注意,我是把 ufo 对象强转成某一对象然后调用其 topspeed 方法的,上面程序的输出结果是: planes top speed: 900 planes top speed: 900 planes top speed: 13000 总之:c# 在这方面增加了方法定义的灵活性,给用户的更大的权利。但用不好会出现比较奇怪的结果。所以我觉得在定义方法时全部都加上 sealed 或是 virtual 关键字,这样避免继承的类出错.
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
智能电视能不能用cmcc web
竹溪县中峰镇地址在什么地方,想过去办事
千元一斤的黑枸杞并不比黑木耳高贵多少
牙龈肿脸肿可以热敷吗
下列生物的发育过程没有蛹期的是BA. 蝴蝶B.
一般一个女孩不理一个人,会多长时间?
某进出口贸易公司从境外进口一批低关税的固体
老粗布家纺地址在哪,我要去那里办事
三星显示器s24c350l怎么调出auto
dota 剑圣 面对 剧毒.全能.小Y.直接废物英雄
小龙虾头部的黄颜色的东西能吃吗?这是虾黄?
蘑菇可以和豆腐木耳一起吃吗
一鱼多吃地址在哪,我要去那里办事
广州火车站和广州省站是一个地方吗
2冲程柴油机先进还是4冲程先进
推荐资讯
进口印刷机有哪些申报要素
求龙虎斗(龙与虎)OP的名字 演唱者 还有歌词
有谁知道有像罗志祥 的《岁堤春晓》之类的歌
马自达与本田哪种发动机耐用
黑枸杞常温储存多久
框起来那个为什么等于0?
某仲裁庭在审理某项合同纠纷时,3位仲裁员产
侣行从哪能看第一季啊?
跪求个上古卷轴5 enb 250或254的核心文件(d3
X082地址在什么地方,想过去办事
多项选择题 下列关于法律原则的表述哪项是错
你我贷账号不想用怎么注销
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?