Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请引导我了解oops的这个概念_Oop - Fatal编程技术网

请引导我了解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中进行了测试,测试结果与预期一致。。。