NS_OVERRIDE is a macro which allows C++ code in Mozilla to specify that a method is intended to override a base class method. If there is no base class method with the same signature, a compiler with static-checking enabled will fail to compile.

NS_OVERRIDE is declared in nscore.h, beginning with Gecko 2.0. It was introduced in bug 500870.

Example

Class A has a method GetFoo() which is overridden by class B:

class A
{
  virtual nsresult GetFoo(nsIFoo** aResult);
};

class B : public A
{
  NS_OVERRIDE virtual nsresult GetFoo(nsIFoo** aResult);
};

Later, the signature of A::GetFoo() is changed to remove the output parameter:

 class A
 {
-  virtual nsresult GetFoo(nsIFoo** aResult);
+  virtual already_AddRefed<nsIFoo> GetFoo();
 };

B::GetFoo() no longer overrides A::GetFoo() as was originally intended. A compiler with static-checking enabled will issue the following error:

test.cpp:8: error: NS_OVERRIDE function B::GetFoo(nsIFoo**) does not override a base class method with the same name and signature.