トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

C++とJava

[プログラミング]
[Java]


C++とJavaの違いのメモ

オーバライドと仮想関数のメモ

C++の場合、スーパークラスのメンバ関数にvirtualをつけると次のように動作する。
つけない場合には、スーパークラスの関数が呼ばれる。

#include <iostream>
using namespace std;
class VirtualTest
{
public:
  virtual void test(){ cout << "virtual test" << endl; }
};
class Test
{
public:
  void test(){ cout << "test" << endl; }
};
class VirtualTest1 :public VirtualTest
{
public:
  void test(){ cout << "virtual test 1" << endl; }
};
class Test1: public Test
{
public:
  void test(){ cout << "test 1" << endl; }
};
int main(){
  VirtualTest *v;
  Test *t;
  v = new VirtualTest1;
  t = new Test1;
  v->test();
  t->test();
}

結果

virtual test 1
test

Javaの場合virtualはなくて、生成したクラスの方のメソッドが呼ばれる。
デフォルトでvirtualがついてるってことかな。

class VirtualTest{
  public void test(){
    System.out.println("virutal test");
  }
}

class VirtualTest1 extends VirtualTest{
  public void test(){
    System.out.println("virutal test 1");
  }
}

public class Test{

  public static void main(String args[]){
    VirtualTest v = new VirtualTest1();
    v.test();
    ((VirtualTest1)v).test();
  }

}

結果

virutal test 1
virutal test 1