Есть ли какой-либо язык программирования, на котором вы можете переопределить метод на 2 класса? - PullRequest
1 голос
/ 11 октября 2010

Например, если у вас есть класс 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 ]

3 голосов
/ 11 октября 2010

AFAIK, вы можете сделать это на большинстве (если не на всех) языках OO, например, на Java и C ++.

1 голос
/ 11 октября 2010

да, это очень общий случай, Java делает это.

0 голосов
/ 11 октября 2010

Я думаю, что большинство распространенных языков позволят это без проблем, если все модули будут перекомпилированы.В некоторых есть недочеты (включая C # и vb.net), если переопределение добавлено в класс среднего уровня, у которого его не было, когда был скомпилирован дочерний метод.В этом сценарии, если дочерние классы не перекомпилированы, вызовы их родительских методов могут обходить классы среднего уровня (поскольку эти классы среднего уровня не имели переопределений при компиляции дочерних проходов).

0 голосов
/ 11 октября 2010

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());

    }
}
0 голосов
/ 11 октября 2010

Этот код рубина делает именно то, что вы хотите:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...