OOPで次のように、メンバー変数を直接するのと、メソッド経由で参照するのとで、値がことなります。
これの言語仕様がどういう理由によるものなのかが腑に落ちません。どのように考えたらよいのでしょうか。
なお、今回のサンプル記述はSystemVerilogというマイナーな言語(Java、C++をベースとしたハードウェア記述言語)になります。Rubyなど他の言語についても同じ動作となると想像されますが、詳しくはわかっていません。
verilog
1class Base; 2 int val=0; // public 3 virtual function int getval(); 4 return val; 5 endfunction 6endclass 7class Extend extends Base; 8 int val=1; // public 9endclass 10 11initial begin // main()に相当 12 Base b; 13 Extend e; 14 e = new(); 15 b = e; // downcast 16 $display("val is %d", b.val); // 0 17 $display("val is %d", b.getval()); // 1 18end 19
宜しくおねがいします。