>>234の訂正。
standard_equal と deep_equal と equal は引数が2つのメソッドだと書くの忘れてた。
それと、オーバライドできるのは equal じゃなくて、引数が1つの is_equal です。
勘違いした。すまん。

Eiffelの例を考えてみました。

class COMPARATOR
feature
  xxx_equal(a, b: FOO): BOOLEAN is do ... end
  ...
end

class B inherit A COMPARATOR
feature
  foo1, foo2: FOO
  hoge is
    do
      create foo1
      create foo2
      if xxx_equal(foo1, foo2) then
        print("True")
      else
        print("False")
      end
    end
end

必要があれば xxx_equal を引数として渡すこともできます。