请引导我了解oops的这个概念
在最近的一次采访中,我遇到了这个问题:请引导我了解oops的这个概念,oop,Oop,在最近的一次采访中,我遇到了这个问题: class1 { virtual getname(); {//code here..} } class2:class1 { overrides getname(); {//code here..} } class3:class2 { public new getname(); {//code here..} } class4 { class1 obj=new class3(); obj.getname(); }
class1
{
virtual getname();
{//code here..}
}
class2:class1
{
overrides getname();
{//code here..}
}
class3:class2
{
public new getname();
{//code here..}
}
class4
{
class1 obj=new class3();
obj.getname();
}
现在在
class4
中,将调用哪个类的方法?为什么?在oops中,这个概念叫什么?在class3
中调用的getname
它叫
摘自链接
简单地说,如果一个方法没有覆盖派生方法,它就是在隐藏它。必须使用new关键字声明隐藏方法
class3
中的getname
将是唯一被调用的
它叫
摘自链接
简单地说,如果一个方法没有覆盖派生方法,它就是在隐藏它。必须使用new关键字声明隐藏方法
调用是针对接口执行的,在本例中,接口是Class1 对象obj有两个方法getname:一个在Class1接口中,另一个在Class3接口中。在本例中,调用了Class1接口中的一个,但是Class2中已经跳过了该方法在Class1接口中的实现,并且由于reel对象是Class3,因此它返回在Class2中进行的实现 最后的答案是2班
在OOP中,这被称为“多态性”(polymorphisme)。该调用是针对接口执行的,在本例中,接口是Class1 对象obj有两个方法getname:一个在Class1接口中,另一个在Class3接口中。在本例中,调用了Class1接口中的一个,但是Class2中已经跳过了该方法在Class1接口中的实现,并且由于reel对象是Class3,因此它返回在Class2中进行的实现 最后的答案是2班
在OOP中,这称为“多态”。请添加适当的语言标记这是什么语言?它看起来像C++,但它不是有效的C++。请考虑这个概念,不要继续语言,任何我在C语言或C++中的概念,请添加适当的语言标记。它看起来像C++,但它不是有效的C++。请考虑这个概念,不要继续语言,任何我在C或C++中预期的概念,你的链接暗示,因为OBJ是类型<代码> Cult1< /Cord>,它不是虚拟的调度,<代码> Calth3::GETNAME/<代码>将不被调用。我猜是
class2::getname
,但我不是一个C#guy。奇怪的是这么多人都认可我。如果obj被声明为class3,但它被声明为class1,那么调用class2::getname是正确的。我最终怀疑它,并在c#4.0中测试了它,它的工作原理与预期一致……您的链接表明,由于obj属于class1
类型,并且它不是虚拟调度,class3::getname
将不会被调用。我猜是class2::getname
,但我不是一个C#guy。奇怪的是这么多人都认可我。如果obj被声明为class3,但它被声明为class1,那么调用class2::getname是正确的。我终于怀疑了它,并在c#4.0中进行了测试,测试结果与预期一致。。。