cppllで話題になっていたprivate virtualな関数について他の言語だとどうなるのか疑問だったので調べてみました。
ちなみに、C++版はこれです。
class Base { public: void test() { foo(); } private: virtual void foo() { printf("base\n"); } }; class Derived : public Base { private: virtual void foo() { printf("derived\n"); } // こっちが呼ばれる }; int main(int, char*[]) { std::auto_ptr<Base> base(new Derived()); base->test(); }
Javaだとprivateメソッドはオーバーライドできません。
class Base { public void test() { foo(); } private void foo() { System.out.println("base"); } // こっちが呼ばれる } class Derived extends Base { private void foo() { System.out.println("derived"); } } public class Test { public static void main(String[] args) { Base base = new Derived(); base.test(); } }
C#だとprivateメソッドはvirtualになれません。
class Base { public void test() { foo(); } private virtual void foo() { System.Console.WriteLine("base"); } // ここでコンパイルエラー } class Derived : Base { private override void foo() { System.Console.WriteLine("derived"); } // 当然コンパイルエラー } public class Test { public static void Main() { Base base = new Derived(); base.test(); } }
タスクトレイにGmailの新着メールを通知してくれるようです。どこまでクライアントツールに依存させるのかというのも見ものです。
from Gmailの受信メールをデスクトップでチェックできる「Gmail Notifier」 & 「You've got Gmail」--グーグルがGmailにデスクトップ通知機能を追加