在最近一次采访中我遇到了这个问题:
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这个概念?
答案 0 :(得分:5)
答案 1 :(得分:2)
对接口执行调用,在这种情况下,接口是Class1。
对象obj有两个方法getname:一个在Class1接口,一个在Class3接口。在这种情况下,Class1接口中的那个被调用,但是class1接口中的这个方法的实现已经在Class2中被覆盖,并且由于reel对象是Class3,它返回class2中的实现。
最后的答案是Class2
在OOP中,这被称为“多态性”。