例如,如果您有A类,B类继承A,C类继承B,那么C类是否可以覆盖A类方法的任何编程语言,即使B类没有覆盖它?
class A {
method() {}
}
class B extends A{
}
class C extends B {
//override method from A
method(){}
}
答案 0 :(得分:3)
AFAIK您可以在大多数(如果不是全部)OO语言中执行此操作,例如:用Java和C ++肯定。
答案 1 :(得分:1)
是的,这是非常普遍的情况,Java就是这样做的。
答案 2 :(得分:0)
这个ruby代码正是你想要的:
class A
def hello
puts "hello from class A"
end
end
class B < A
end
class C < B
def hello
puts "hello from C"
end
end
B.new.hello
C.new.hello
执行后,您将获得以下输出:
hello from class A
hello from C
答案 3 :(得分:0)
C#为一个
public class A
{
virtual public int retval(int x)
{
return x;
}
}
public class B : A
{
}
public class C : B
{
public override int retval(int x)
{
return 3;
}
}
class Program
{
static void Main(string[] args)
{
A a = new C();
Console.WriteLine(a.retval(2).ToString());
}
}
答案 4 :(得分:0)
我认为如果重新编译所有模块,大多数常用语言都会毫无困难地允许这样做。如果将一个覆盖添加到一个中级类,在编译子方法时没有一个,那么在某些(包括C#和vb.net)中就会出现问题。在这种情况下,如果不重新编译子类,则调用其父方法可能会绕过中级类(因为这些中级类在编译子级时没有覆盖)。