<div dir="ltr"><div dir="ltr"><div>Hi WebKit devs,</div><div><br></div><div>'final' keyword can be applied to both a class and a method</div><div>(non-static member function). I don't know correct terminology for</div><div>them. I call them 'final' class specifier and 'final' method</div><div>specifier.</div><div><br></div><div>I'm now going to update WebKit Code Style Guidelines for using 'final'</div><div>class specifier for all classes which has no derived classes in Bug</div><div>192844.</div><div><a href="https://bugs.webkit.org/show_bug.cgi?id=192844">https://bugs.webkit.org/show_bug.cgi?id=192844</a><br></div><div><br></div><div>I believe this is not controversial. This is not a topic I'd like to</div><div>discuss today.</div><div><br></div><div>I'd like to discuss which 'override' or 'final' should be used for methods.</div><div><br></div><div>Currently, WebKit is using both inconsistently.</div><div>For example, CSSFontFaceSet class is marked 'final' and its methods are marked 'final',</div><div>while CSSFontFaceSource class is marked 'final' and its methods are marked 'override'.</div><div><a href="https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/css/CSSFontFaceSet.h?rev=239365#L93">https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/css/CSSFontFaceSet.h?rev=239365#L93</a><br></div><div><a href="https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/css/CSSFontFaceSource.h?rev=239365#L83">https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/css/CSSFontFaceSource.h?rev=239365#L83</a></div><div><br></div><div><br></div><div>According to WebKit Code Style Guidelines, 'final' method specifier is</div><div>preferable to 'override' if possible. There is a previous discussion</div><div>thread.</div><div><a href="https://webkit.org/code-style-guidelines/#override-methods">https://webkit.org/code-style-guidelines/#override-methods</a><br></div><div><a href="https://lists.webkit.org/pipermail/webkit-dev/2016-March/028022.html">https://lists.webkit.org/pipermail/webkit-dev/2016-March/028022.html</a></div><div><br></div><div>I'd like to change this because 'final' doesn't necessarily imply</div><div>'override'. See the following stackoverflow:</div><div><a href="https://stackoverflow.com/questions/29412412/does-final-imply-override">https://stackoverflow.com/questions/29412412/does-final-imply-override</a><br></div><div><br></div><div>IIUC, 'final' method specifier can be useful for such like the following case:</div><div><br></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div><font face="monospace, monospace">class B {</font></div></div><div><div><font face="monospace, monospace">public:</font></div></div><div><div><font face="monospace, monospace">  virtual foo();</font></div></div><div><div><font face="monospace, monospace">  virtual bar();</font></div></div><div><div><font face="monospace, monospace">};</font></div></div><div><div><font face="monospace, monospace">class B1 : public B {</font></div></div><div><div><font face="monospace, monospace">  foo() final;  </font></div></div><div><div><font face="monospace, monospace">};</font></div></div><div><div><font face="monospace, monospace">class D final : B1 {</font></div></div><div><div><font face="monospace, monospace">  bar() override;</font></div></div><div><div><font face="monospace, monospace">};</font></div></div></blockquote><div dir="ltr"><div><br></div><div>The 'final' method specifier indicates D can't override the method foo.<br></div><div>Thus, using 'final' method specifier implies other virtual functions</div><div>can be overridden. I'm not sure my understanding right. Please correct me.</div><div><br></div></div></div>