是否有任何编程语言可以覆盖2个类的方法?

时间:2010-10-11 16:06:50

标签: oop

例如,如果您有A类,B类继承A,C类继承B,那么C类是否可以覆盖A类方法的任何编程语言,即使B类没有覆盖它?

class A {
  method() {}
}

class B extends A{
}

class C extends B {
  //override method from A
  method(){}
}

5 个答案:

答案 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)中就会出现问题。在这种情况下,如果不重新编译子类,则调用其父方法可能会绕过中级类(因为这些中级类在编译子级时没有覆盖)。