過去スレ
オブジェクト指向はオワコン (2023/08/26〜)
https://mevius.5ch.io/test/read.cgi/tech/1721393540/
オブジェクト指向はオワコン? (2024/07/19〜)
https://mevius.5ch.io/test/read.cgi/tech/1721393540/
オブジェクト指向はオワコン? part2 (2026/08/13〜)
https://mevius.5ch.io/test/read.cgi/tech/1786599483/
オブジェクト指向はオワコン? part3 (2026/08/26〜)
https://mevius.5ch.io/test/read.cgi/tech/1787712923/
オブジェクト指向はオワコン? part4
1デフォルトの名無しさん
2026/09/24(木) 21:48:24.69ID:R0E4hCxI216デフォルトの名無しさん
2026/09/30(水) 21:59:42.03ID:DgqfE3x6 >>215
具体的には?
具体的には?
217デフォルトの名無しさん
2026/09/30(水) 23:16:27.83ID:ZN730fJJ >>201
>テンプレートとかRustのトレイトとか挙げてるやん。
その2つはどっちも反例になってないでしょ
テンプレートは名前的型付けじゃないしRustのトレイトはインターフェース継承と同じで定義を継承してる
>テンプレートとかRustのトレイトとか挙げてるやん。
その2つはどっちも反例になってないでしょ
テンプレートは名前的型付けじゃないしRustのトレイトはインターフェース継承と同じで定義を継承してる
218デフォルトの名無しさん
2026/09/30(水) 23:18:24.05ID:Tf9baifh >>212
>>拡張トレイトやジェネリックは動的多態できないし、
Rustは拡張トレイトも静的ディスパッチと動的ディスパッチの両方できる
ジェネリックはC++でもRustでも静的ディスパッチで単相化するための文法
Rustではジェネリックにせずとも可能
普通の関数で静的ディスパッチと動的ディスパッチそれぞれを選んでどちらも使える
そんな至れり尽くせりの言語は他にないでしょう
>>トレイトオブジェクトはスーパートレイトを取り込む必要がある
Rustはスーパートレイトも含めてどれだけ大量のトレイトを指定しても静的に一つのvtableに取り込むことができるため柔軟性があるとともに動的ディスパッチが最も速い、が正解
これができない言語は複数のvtableを動的に見ていくことになって遅い
>>拡張トレイトやジェネリックは動的多態できないし、
Rustは拡張トレイトも静的ディスパッチと動的ディスパッチの両方できる
ジェネリックはC++でもRustでも静的ディスパッチで単相化するための文法
Rustではジェネリックにせずとも可能
普通の関数で静的ディスパッチと動的ディスパッチそれぞれを選んでどちらも使える
そんな至れり尽くせりの言語は他にないでしょう
>>トレイトオブジェクトはスーパートレイトを取り込む必要がある
Rustはスーパートレイトも含めてどれだけ大量のトレイトを指定しても静的に一つのvtableに取り込むことができるため柔軟性があるとともに動的ディスパッチが最も速い、が正解
これができない言語は複数のvtableを動的に見ていくことになって遅い
219デフォルトの名無しさん
2026/10/01(木) 00:27:33.58ID:yqAKIueN Rubyをdisるのはよせ
220デフォルトの名無しさん
2026/10/01(木) 01:03:03.52ID:MoFt4NQA >>217
継承という語は、一般に部分型関係を作ることを目的とする構文という意味で使われるが、Rustのトレイトは部分型関係を作るものではない。一般的にもRustのトレイトが継承であるとは説明されない。
C/C++のテンプレートやPythonのプロトコルなんかを一種の構造的な型として観念する考え方は個人的には結構好きだが、言語仕様としての型(これらの言語において通常の意味での型とされる名前付きの型)と同様の扱いがされるわけではない。テンプレートが構造的型付け「に近い」とか、構造的型付け「的」とか、「一種の」構造的型付けといった、ちょっと含みのある表現で説明されることが多いのはなぜかを考えてみるとよい。
大体、そんなオレオレ定義・解釈を前提に「名前的型付けには型の互換性を指定する方法が継承しかない。だから、構造的型付けの方が優れている」とやっても誰も聞いてくれないでしょ。名前的型付けと構造的型付けの比較の文脈で、「テンプレートは構造的型付けだから構造的型付けの方が優れている」と主張することがどれだけ無意味か考えてみたら分かりそうなものだが。そんなことをしなくても構造的型付けには一定の価値は認められているよ。
継承という語は、一般に部分型関係を作ることを目的とする構文という意味で使われるが、Rustのトレイトは部分型関係を作るものではない。一般的にもRustのトレイトが継承であるとは説明されない。
C/C++のテンプレートやPythonのプロトコルなんかを一種の構造的な型として観念する考え方は個人的には結構好きだが、言語仕様としての型(これらの言語において通常の意味での型とされる名前付きの型)と同様の扱いがされるわけではない。テンプレートが構造的型付け「に近い」とか、構造的型付け「的」とか、「一種の」構造的型付けといった、ちょっと含みのある表現で説明されることが多いのはなぜかを考えてみるとよい。
大体、そんなオレオレ定義・解釈を前提に「名前的型付けには型の互換性を指定する方法が継承しかない。だから、構造的型付けの方が優れている」とやっても誰も聞いてくれないでしょ。名前的型付けと構造的型付けの比較の文脈で、「テンプレートは構造的型付けだから構造的型付けの方が優れている」と主張することがどれだけ無意味か考えてみたら分かりそうなものだが。そんなことをしなくても構造的型付けには一定の価値は認められているよ。
221デフォルトの名無しさん
2026/10/01(木) 01:03:52.45ID:AJ//+KV9 オブジェクト指向で抽象メソッド/仮想メソッドを使うと便利でわかりやすくなるけど
実行が遅くなるため面倒でわかりにくい方法を選ぶ
という本末転倒な言語が存在する現実があるもんな
便利かつ速いの両立は重要
実行が遅くなるため面倒でわかりにくい方法を選ぶ
という本末転倒な言語が存在する現実があるもんな
便利かつ速いの両立は重要
222デフォルトの名無しさん
2026/10/01(木) 01:15:57.35ID:S1m1fK+S >>220
その通り
2種類の構造的型付けの用法がそこでなされていることに注目
1つ目は本来の構造的型付けで
「構造的に同じオブジェクトが同じ型とみなされ動く」
2つ目は構造的型付けではなく
「『あるメソッド』または『あるフィールド変数』が使われている関数では、それらを持つオブジェクトが動き、持たないオブジェクトはエラー」
ようするにダックタイピングであり構造的型付けとは明白に異なる
その通り
2種類の構造的型付けの用法がそこでなされていることに注目
1つ目は本来の構造的型付けで
「構造的に同じオブジェクトが同じ型とみなされ動く」
2つ目は構造的型付けではなく
「『あるメソッド』または『あるフィールド変数』が使われている関数では、それらを持つオブジェクトが動き、持たないオブジェクトはエラー」
ようするにダックタイピングであり構造的型付けとは明白に異なる
223デフォルトの名無しさん
2026/10/01(木) 01:35:40.22ID:rHwutQT4 小さなプログラムではダックタイピングもお手軽で良いものだ
しかし大きなプログラムでは足を引っ張る存在になる
通過条件を名前で明瞭に指定できる方が好ましい
単純な例
関数fを通過できるxはhello()とbye()を持っていなければならないとすぐにわかるが
これがもっと大量に多段に複雑になると見通せなくなる
function f(x) {
f1(x)
f2(x)
}
function f1(x) {
x.hello()
}
function f2(x) {
x.bye()
}
しかし大きなプログラムでは足を引っ張る存在になる
通過条件を名前で明瞭に指定できる方が好ましい
単純な例
関数fを通過できるxはhello()とbye()を持っていなければならないとすぐにわかるが
これがもっと大量に多段に複雑になると見通せなくなる
function f(x) {
f1(x)
f2(x)
}
function f1(x) {
x.hello()
}
function f2(x) {
x.bye()
}
224デフォルトの名無しさん
2026/10/01(木) 08:15:19.04ID:qDprx/3L fなんて名前つけてるからわかりにくいだけ
225デフォルトの名無しさん
2026/10/01(木) 08:46:43.48ID:y+q+mooV226デフォルトの名無しさん
2026/10/01(木) 09:32:32.19ID:7cmToZJY227デフォルトの名無しさん
2026/10/01(木) 09:40:05.10ID:jv3WtkyP >>220
テンプレートが名前的型付けじゃないことはわかったみたいだね
>Rustのトレイトは部分型関係を作るものではない
Rustのトレイトは部分型関係を作るためのものだよ
というかそのために存在してる
impl MyTrait For MyStructという宣言は
MyStructという型とimpl MyTrait/dyn MyTraitという型との部分型関係を作るもの
>だから、構造的型付けの方が優れている
これは曲解だね
俺はそんなこと全く思ってない
それぞれの特徴を理解して使い分ければいいだけ
最初に継承しかないと書いた人の意図は知らんけど
テンプレートが名前的型付けじゃないことはわかったみたいだね
>Rustのトレイトは部分型関係を作るものではない
Rustのトレイトは部分型関係を作るためのものだよ
というかそのために存在してる
impl MyTrait For MyStructという宣言は
MyStructという型とimpl MyTrait/dyn MyTraitという型との部分型関係を作るもの
>だから、構造的型付けの方が優れている
これは曲解だね
俺はそんなこと全く思ってない
それぞれの特徴を理解して使い分ければいいだけ
最初に継承しかないと書いた人の意図は知らんけど
228デフォルトの名無しさん
2026/10/01(木) 09:46:02.53ID:y+q+mooV229デフォルトの名無しさん
2026/10/01(木) 09:47:26.94ID:jv3WtkyP >>225
拡張トレイトがExtention Traitの日本語訳ということなら
既存の構造体を拡張するのに新しくMyTraitを定義して
impl MyTrait for ForeignStructとすることで
ForeignStructに新しいメソッドを生やす手法のこと
拡張トレイトがExtention Traitの日本語訳ということなら
既存の構造体を拡張するのに新しくMyTraitを定義して
impl MyTrait for ForeignStructとすることで
ForeignStructに新しいメソッドを生やす手法のこと
230デフォルトの名無しさん
2026/10/01(木) 09:58:18.59ID:7cmToZJY >>227
C++のテンプレートは、それ自体としては名前的型付けでも構造的型付けでもないぞ。テンプレートによって観念される構造的な型を言語仕様上の型(C++における通常の型)と見てよいなら構造的型付けといってもよいが、C++の仕様はそうなっていない。
Rustのトレイトは部分型関係を作るというオレオレ定義がやりたいならどうぞご自由に。検索するなりAIに聞くなりして、Rustのトレイトは継承か、部分型関係を作るか、サブタイピング多相の一種かと聞いてみたらよいのに。
C++のテンプレートは、それ自体としては名前的型付けでも構造的型付けでもないぞ。テンプレートによって観念される構造的な型を言語仕様上の型(C++における通常の型)と見てよいなら構造的型付けといってもよいが、C++の仕様はそうなっていない。
Rustのトレイトは部分型関係を作るというオレオレ定義がやりたいならどうぞご自由に。検索するなりAIに聞くなりして、Rustのトレイトは継承か、部分型関係を作るか、サブタイピング多相の一種かと聞いてみたらよいのに。
231デフォルトの名無しさん
2026/10/01(木) 10:56:31.63ID:yO5/bCLS >>222
これぞ複オジメソッド!
これぞ複オジメソッド!
232デフォルトの名無しさん
2026/10/01(木) 11:25:38.07ID:jiVxewCN233デフォルトの名無しさん
2026/10/01(木) 11:30:35.71ID:ZKWfJGw+ 具体的に>>197のtrait Helloの例を考えてみると
i32型はHelloの部分型になったと解釈することは可能で
str型もHelloの部分型になったと解釈することは可能であるが
問題はHelloを定義もしくはuse パス::Hello;したモジュール空間でしか部分型の関係が有効でないという点だ
つまりi32型が本質的にHelloの部分型になったとは言えない
このようにRustのtraitは柔軟性が高くて従来の枠組みで解釈しにくい
i32型はHelloの部分型になったと解釈することは可能で
str型もHelloの部分型になったと解釈することは可能であるが
問題はHelloを定義もしくはuse パス::Hello;したモジュール空間でしか部分型の関係が有効でないという点だ
つまりi32型が本質的にHelloの部分型になったとは言えない
このようにRustのtraitは柔軟性が高くて従来の枠組みで解釈しにくい
234デフォルトの名無しさん
2026/10/01(木) 11:33:58.57ID:jiVxewCN 「Rustのトレイトは部分型関係を作るためのものだよ
というかそのために存在してる」
複クン語録がまたひとつ増えたな
というかそのために存在してる」
複クン語録がまたひとつ増えたな
235デフォルトの名無しさん
2026/10/01(木) 11:40:20.09ID:ZKWfJGw+ >>234
Rustのトレイトを実装するとその型はそのトレイトの部分型関係になるのは事実
ただし有効範囲がそのトレイトの利用を宣言した範囲のみ
だからどちらも正しい
「本質的に部分型になったわけではない」
「その空間では部分型になっている」
Rustのトレイトを実装するとその型はそのトレイトの部分型関係になるのは事実
ただし有効範囲がそのトレイトの利用を宣言した範囲のみ
だからどちらも正しい
「本質的に部分型になったわけではない」
「その空間では部分型になっている」
236デフォルトの名無しさん
2026/10/01(木) 12:00:46.25ID:ZKWfJGw+ つまりRustは既存のコードに全く影響を与えることなく
自分の空間内で新たな抽象型(trait)を導入して既存の型をその部分型にすることが可能
という柔軟性を持っていることになる
自分の空間内で新たな抽象型(trait)を導入して既存の型をその部分型にすることが可能
という柔軟性を持っていることになる
237デフォルトの名無しさん
2026/10/01(木) 14:13:08.24ID:JSml55T0 crate A の trait を
crate B の struct に
実装したいんだが
crate B の struct に
実装したいんだが
238デフォルトの名無しさん
2026/10/01(木) 14:31:53.80ID:ZHX7JAyA239デフォルトの名無しさん
2026/10/01(木) 15:25:10.43ID:J4R8nJl4 自由度を失ってる
240デフォルトの名無しさん
2026/10/01(木) 15:39:28.93ID:hkcHmRg+ 自由度ってなんだ?
何が失われている?
何が失われている?
241デフォルトの名無しさん
2026/10/02(金) 10:35:58.17ID:3EJYfiDQ 拡張メソッドはオブジェクト指向なのか?
242デフォルトの名無しさん
2026/10/02(金) 11:51:55.08ID:7hPXzRqp >>197の例は既存のi32型のオブジェクトとstr型のオブジェクトが共にHelloという抽象型オブジェクトとしても扱えるようになった
オブジェクト指向プログラミングの利点の一つであるコードの共通化が可能になった
例えば抽象型Helloを受け付ける関数
fn hello_twice(x: impl Hello) {
x.hello();
x.hello();
}
共通してi32型もstr型もどちらも使える
hello_twice(123);
hello_twice("abc");
オブジェクト指向プログラミングの利点の一つであるコードの共通化が可能になった
例えば抽象型Helloを受け付ける関数
fn hello_twice(x: impl Hello) {
x.hello();
x.hello();
}
共通してi32型もstr型もどちらも使える
hello_twice(123);
hello_twice("abc");
243デフォルトの名無しさん
2026/10/02(金) 12:06:22.86ID:YK3IsGy0 >>241
メソッドがすでにオブジェクト指向
メソッドがすでにオブジェクト指向
244デフォルトの名無しさん
2026/10/02(金) 12:18:35.18ID:JhD5xoM2245デフォルトの名無しさん
2026/10/02(金) 13:31:59.98ID:poUMNNer そんな悪手教えんなよ
246デフォルトの名無しさん
2026/10/02(金) 13:43:28.24ID:3EJYfiDQ247デフォルトの名無しさん
2026/10/02(金) 15:32:01.06ID:3B7GzgLW248デフォルトの名無しさん
2026/10/02(金) 15:32:33.29ID:FvujYSRB use v5.38;
use feature 'class';
no warnings 'experimental::class';
class Hello {
field $x :param;
method hello_twice {
say "Hello! $x";
}
}
Hello->new(x => 123)->hello_twice;
Hello->new(x => 'abc')->hello_twice;
実行結果
$ perl hello_twice.txt
Hello! 123
Hello! abc
use feature 'class';
no warnings 'experimental::class';
class Hello {
field $x :param;
method hello_twice {
say "Hello! $x";
}
}
Hello->new(x => 123)->hello_twice;
Hello->new(x => 'abc')->hello_twice;
実行結果
$ perl hello_twice.txt
Hello! 123
Hello! abc
249デフォルトの名無しさん
2026/10/02(金) 15:37:47.92ID:FvujYSRB やっぱClassなど使わん方がすっきり書けるな
use v5.38;
package Hello {
sub new ($class, $x) { bless \$x, $class }
sub hello_twice ($self) { say "Hello! $$self" }
}
Hello->new(123)->hello_twice;
Hello->new('abc')->hello_twice;
use v5.38;
package Hello {
sub new ($class, $x) { bless \$x, $class }
sub hello_twice ($self) { say "Hello! $$self" }
}
Hello->new(123)->hello_twice;
Hello->new('abc')->hello_twice;
250デフォルトの名無しさん
2026/10/02(金) 16:18:06.08ID:FvujYSRB use v5.38;
sub Hello ($x) {
sub { say "Hellow! $x" }
}
Hello(123)->();
Hello("abc")->();
sub Hello ($x) {
sub { say "Hellow! $x" }
}
Hello(123)->();
Hello("abc")->();
251デフォルトの名無しさん
2026/10/02(金) 17:40:59.76ID:XTYJpt71 意図が全く伝わってなくて芝生える
252デフォルトの名無しさん
2026/10/02(金) 18:25:06.64ID:FvujYSRB うん、書いてて俺もそう思った
253デフォルトの名無しさん
2026/10/02(金) 19:44:57.95ID:+L4zhpGG hello_twice()は2回helloだよ
254デフォルトの名無しさん
2026/10/02(金) 19:57:02.54ID:+L4zhpGG >>244
そのHelloは抽象型
From/Intoは具象型同士の変換だよ
ではどうすればよいか?
二つの方法があります
一つ目は既に>>242に出ているimpl Helloで受け取る方法
fn hello_twice(x: impl Hello) {
x.hello();
x.hello();
}
これは単相化されて静的ディスパッチつまり普通の関数呼び出しになる
そのためインライン化などの最適化も行なえるから最も有利だね
呼び出す側は既に出ているようにそのまま渡せる
hello_twice(123);
hello_twice("abc");
これは値をそのまま渡しているけど
受け取り側をx: &impl Helloにすることで参照を渡すこともできるよ
そのHelloは抽象型
From/Intoは具象型同士の変換だよ
ではどうすればよいか?
二つの方法があります
一つ目は既に>>242に出ているimpl Helloで受け取る方法
fn hello_twice(x: impl Hello) {
x.hello();
x.hello();
}
これは単相化されて静的ディスパッチつまり普通の関数呼び出しになる
そのためインライン化などの最適化も行なえるから最も有利だね
呼び出す側は既に出ているようにそのまま渡せる
hello_twice(123);
hello_twice("abc");
これは値をそのまま渡しているけど
受け取り側をx: &impl Helloにすることで参照を渡すこともできるよ
255デフォルトの名無しさん
2026/10/02(金) 20:24:52.90ID:Ei5gJ0Kk もう一つの方法は&dyn Helloで受け取る方法
fn hello_twice2(x: &dyn Hello) {
x.hello();
x.hello();
}
これは動的ディスパッチになる
dynはもちろん動的の略
>>254の単相化とは異なりこの関数の実体が一つになることがメリット
呼び出しは引数のサイズを揃えないといけないから参照で渡す
hello_twice2(&123);
hello_twice2(&"abc");
そのため受け取り側も&が付いてx: &dyn Helloになってるよ
しかし動的ディスパッチは実行時にvtableを引くため遅いうえに
インライン最適化ができないためかなり遅い
それでもdyn Helloにしかできない魅力もある分かるよね
fn hello_twice2(x: &dyn Hello) {
x.hello();
x.hello();
}
これは動的ディスパッチになる
dynはもちろん動的の略
>>254の単相化とは異なりこの関数の実体が一つになることがメリット
呼び出しは引数のサイズを揃えないといけないから参照で渡す
hello_twice2(&123);
hello_twice2(&"abc");
そのため受け取り側も&が付いてx: &dyn Helloになってるよ
しかし動的ディスパッチは実行時にvtableを引くため遅いうえに
インライン最適化ができないためかなり遅い
それでもdyn Helloにしかできない魅力もある分かるよね
256デフォルトの名無しさん
2026/10/02(金) 21:58:35.67ID:/09UbK/K やりたいことに対して一番パーフォーマンスが出るものでやればよい
再利用なんてする必要もなくなった
再利用なんてする必要もなくなった
257デフォルトの名無しさん
2026/10/02(金) 22:25:44.89ID://P+TiQT 動的ディスパッチのdyn Helloを使うのは実行時ガチャな時だな
どの具体型が返ってくるかわからないガチャ関数やガチャ式
あとはベクタ等へ混在して突っ込んで要素が実行時ガチャになる時
焦点はそこじゃなくてほとんどのプログラミング言語は抽象型の抽象メソッドが動的ディスパッチになって遅くなることだろ
一方でRustはガチャでなければdyn Helloをimpl Helloに変えるだけで静的ディスパッチになってインライン最適化も起きて劇的に速くなる
どの具体型が返ってくるかわからないガチャ関数やガチャ式
あとはベクタ等へ混在して突っ込んで要素が実行時ガチャになる時
焦点はそこじゃなくてほとんどのプログラミング言語は抽象型の抽象メソッドが動的ディスパッチになって遅くなることだろ
一方でRustはガチャでなければdyn Helloをimpl Helloに変えるだけで静的ディスパッチになってインライン最適化も起きて劇的に速くなる
258デフォルトの名無しさん
2026/10/02(金) 22:44:01.04ID:kTuJA86n 仮想メソッドは動的ディスパッチになって遅くなるから使うな!
という本末転倒の流儀まであるから草生える
という本末転倒の流儀まであるから草生える
259デフォルトの名無しさん
2026/10/02(金) 22:44:51.68ID:+vRC15PC これ>>256
人間が小さなワーキングメモリで考えやすく書きやすいように
人工的に小さく区切って部品化する必要がなくなってる
しかしAIなら多少区切りを大きく出来るとは言え完全になくすことは出来ないけど
人間が小さなワーキングメモリで考えやすく書きやすいように
人工的に小さく区切って部品化する必要がなくなってる
しかしAIなら多少区切りを大きく出来るとは言え完全になくすことは出来ないけど
260デフォルトの名無しさん
2026/10/02(金) 22:55:13.49ID:Qvuvq1PR >>256
パーフォーマンスが出る静的ディスパッチを選べない言語では、パーフォーマンスを断念するか、オブジェクト指向による抽象化を断念するかの二者択一になることがある
パーフォーマンスが出る静的ディスパッチを選べない言語では、パーフォーマンスを断念するか、オブジェクト指向による抽象化を断念するかの二者択一になることがある
261デフォルトの名無しさん
2026/10/02(金) 23:18:34.58ID:OeRsxfuS262デフォルトの名無しさん
2026/10/02(金) 23:53:31.23ID://P+TiQT C++はテンプレート使えば単相化静的ディスパッチになるけど
抽象型名を伴わない静的ダックタイピングな点や仮想関数による動的ディスパッチの時とコードが全く違ってくる点が残念だよな
Rustはトレイトの仮想関数そのまま静的ディスパッチと動的ディスパッチを簡単に切り替えられる点が大きい
抽象型名を伴わない静的ダックタイピングな点や仮想関数による動的ディスパッチの時とコードが全く違ってくる点が残念だよな
Rustはトレイトの仮想関数そのまま静的ディスパッチと動的ディスパッチを簡単に切り替えられる点が大きい
263デフォルトの名無しさん
2026/10/03(土) 06:24:49.57ID:MKfZz3zJ 何言ってるのかよく分からない
#include <concepts>
void hello_twice(std::derived_from<Hello> auto* x) {
x->hello();
x->hello();
}
でstd::derived_from<T, Hello>な型Tがfinalなら静的ディスパッチ、じゃなければ動的
#include <concepts>
void hello_twice(std::derived_from<Hello> auto* x) {
x->hello();
x->hello();
}
でstd::derived_from<T, Hello>な型Tがfinalなら静的ディスパッチ、じゃなければ動的
264デフォルトの名無しさん
2026/10/03(土) 11:11:33.42ID:DkMxwAWo 動的ディスパッチが許されるのはメモリにメッセージをキューするときだけ
xをそれぞれのhellohelloのキューバッファにプッシュするときだけだ
xをそれぞれのhellohelloのキューバッファにプッシュするときだけだ
265デフォルトの名無しさん
2026/10/03(土) 11:14:22.71ID:DkMxwAWo 上の例で言えばfinal以外は害悪
つまり継承は害悪
つまり継承は害悪
266デフォルトの名無しさん
2026/10/03(土) 12:23:02.61ID:iBT1FpbZレスを投稿する
ニュース
- 【海】「全員浮上してこない」ダイビング客など8人が行方不明 八丈島で水難事故 下田海上本部などが捜索中 [ぐれ★]
- 倒産相次ぐ「和菓子店」、2026年は 過去最多ペース 原材料高が追い打ち [ぐれ★]
- 【芸能】広瀬すず「私は異性の友情はあると思っている」 女子高生の恋愛の悩みに真剣回答 [冬月記者★]
- 【しゃぶ葉・食べ放題】配膳ロボで「高価格帯コースの肉を横取り」問題再燃 他の客の商品を取ると音声通知、運営元が全店導入へ ★3 [煮卵★]
- 【野球】セ・リーグ C 6-4 T [10/3] カープ連勝 中村奨成3安打2打点勝ち越しタイムリー 阪神リーグ優勝は持ち越し [鉄チーズ烏★]
- 【芸能】楽しんごが怒り 「話せばすぐ分かることまでずーっとLINEでやり取りされるの本当に腹立つ」「電話一本すれば数分で終わる話」 [冬月記者★]
- 【画像】日本人、お寿司を買えなくなる🍣 [834922174]
- 【実況】博衣こよりのえちえちRadio Spark🧪
- ダブパンランド👊😅👊🏡
- 【高市速報】えちちすぎるダンスがTwitterでバズるWwwwww [856698234]
- 【動画】今フランスで大暴れしてる高校生のデモ、ガチで世紀末になるwwwwwwwwwwwwwwwwwwww [339035499]
- 山上被告「それはそれとして安倍晋三と統一教会の関係は事実だよね?」検察「」 [809488867]