貴様ら!オブジェクト指向を教えろ!!
■ このスレッドは過去ログ倉庫に格納されています
0001Java太郎
NGNG0152Java太郎 ◆DMVtSSFzcg
NGNGわかってないな!おまえ・・・
一番キモイのはオレだ!!
ポリモルフィズムの利点がよくわからない、今日この頃ヾ(´ー` )ノ
0153デフォルトの名無しさん
NGNGThreadクラスの作成者はJAVAのプログラマがどんなクラスを実装
するのか知る事はできない。
だが、Runnableというインターフェースを定義しておく事で
ユーザの任意の元、未知のクラスにrun()というメソッドが
実装される事が保障され、Threadクラスから呼び出す事ができる。
0154デフォルトの名無しさん
NGNG>納得すると思う。できれば図キボンヌ。
interface 文字出力{
void StrOut( String a );
}
class 画面クラス implements 文字出力
class プリンタクラス implements 文字出力
class 音声クラス implements 文字出力
であれば、
ラーメンタイマーは文字出力のクラス変数 tmpOut を持つことができる。
文字出力 tmpOut;
tmpOut の実態のクラスが何であるかにかかわらず
tmpOut.StrOut("お時間がきました");
というメソッドが使える。
もちろんtmpOut変数にはセレクタから、実体を渡されて代入されている必要がある。
ラーメンタイマーが出力先の実体クラスを知る必要はない。
便利である。
0155デフォルトの名無しさん
NGNGA嬢は、ダメポ銀行に入行して2年目、窓口業務もかなり板についてきた。
実はA嬢はひそかにファンドマネージャになりたいと思って、
自己研鑽を重ねている。その成果が現れたのか、最近では
先輩社員がいろいろと相談を持ちかけてくれる。
上司も見る目も変わってきたようだ。
でも、まだまだ配置換えは期待できそうにない。
内心歯がゆい思いをしながら、今日も窓口に座る。
一旦窓口に座れば、窓口業務をこなさなくてはならない。
その時間はA嬢は、お客さまと銀行を取り持つ窓口係という、
大切なインタフェースの役割を果たしている。
0156デフォルトの名無しさん
NGNG初心者にスレの話しても混乱するだけと思われ
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGじゃあ俺もぽりもーひずむの利点を麺にちなんで例えてみる。
俺は製麺工場の技術主任。
架空の製麺機をプログラミングで作ってみたい。
工場ではうどん、蕎麦、ラーメンの3種を製造してる。
作る過程や材料は全部てんでバラバラ。共通性は殆ど無し。
共通していることといえば、麺を作るという事だけ。
という事で俺はまず製麺interfaceなるものを定義してみた。
これはJAVAでいうところのinterfaceですな。
メソッドはひとつ、製麺ボタン()を定義したのみ。
定義したといっても、製麺interface自体は空っぽ、
実体は無い。何の製麺機かすらも決まってない。
つづく
0160デフォルトの名無しさん
NGNG> 製麺interface自体は空っぽ
定義したのか、空っぽなのか、どっちやねん。
それに、メソッド名が名詞てなんやねん。
0161デフォルトの名無しさん
NGNGじゃ、そろそろ、うどん製麺機、蕎麦製麺機、
ラーメン製麺機を作ってみますか。。
ここで俺は当初の予定通り、製麺機を実装するにあたって、
それぞれの製麺機に"製麺interface"をインプリする事にした。
それって具体的にはどういう事か?
それぞれの製麺機は全く異なる機械で、内部動作や外見は異なるんだが
どの機械にも同じように製麺ボタン()を実装する、という事だ。
どの製麺機もこの製麺ボタン()さえ押せば、材料を加工して麺が
できあがるされる事が保障される。これだけ。
でも中でやってる事はとっても複雑なんだけどね。
つづく
0162Java太郎 ◆DMVtSSFzcg
NGNG抽象メソッドみたいだね。
HAS-A関係(?)を使って
擬似的に多重継承できないのかな?
0163デフォルトの名無しさん
NGNG工場の生産ラインには常時青鼻を垂らしてるバイト君が働いている。
彼には入社時に製麺インターフェースの操作方法だけ教え込んだ。
彼のできる事といえば、製麺インターフェースを実装してある
3つの製麺機を目の前にして、ひたすら製麺ボタン()を押すのみ。
彼は頭が足りないので、麺がどのような工程で作られている
のかを知らない、というか、それ以前に目の前の製麺機が何の
製麺機なのかすら知らない。。いや、知る必要すらないのだ。
何故なら何の製麺機であろうと、製麺ボタン()さえ押せれば
麺が出来上がるのだから。。
つづく
0164デフォルトの名無しさん
NGNG工場の生産ラインは順調だ。
バイト君の目前に製麺interfaceを実装した製麺機を置いてやれば、
それが何の製麺機であろうと、彼は麺を見事に作り上げていく。
近々、新商品としてスパゲッティを新たに手がける予定だ。
当然パスタ製麺機も製麺インターフェースをインプリした
機械にする予定なので、新たにバイトを増やす必要も無く、
既存のバイト君に新たな教育をする手間もかからないだろう。
0165デフォルトの名無しさん
NGNGプロジェクトに入ってくるととても迷惑。
0166デフォルトの名無しさん
NGNGあらかじめ言いたいことが分かってる私には、なんでもないけれど、
分かってる人だけにわかればいい文章なんて、ここに書く意味ないし、
分かってない人に分かってもらうには、あまりにも不親切な誤りを含んでいる。
0167デフォルトの名無しさん
NGNG向学のため、指摘していただけると有りがたい。
0168デフォルトの名無しさん
NGNG中身が空っぽの interface
と
中身が空っぽの method
の違いをキチンと理解、区別しようね。
0169デフォルトの名無しさん
NGNG機械に例えたりプログラムに例えたりと
曖昧な例え方がいけなかったかな?
0170デフォルトの名無しさん
NGNG読むのが普通ではないかい?
まあ、単なる比喩を元に突っ込んだ議論をしてもあまり意味がないと
思うけどさ。曖昧な例え方がいけないんじゃなく、日本語の記述に
無頓着なのがいけない気がする。
0171デフォルトの名無しさん
NGNGポリィモーフィズムの雰囲気さえ
掴めれば問題ないんでない?
JAVAの話が主体じゃないんだし
0172デフォルトの名無しさん
NGNG悪かったよ。
もう余計な口は出さん事にするよ。
0173デフォルトの名無しさん
NGNGありがとう。
ほんとうにそうたのむよ。
0174デフォルトの名無しさん
NGNGご満悦そうだな(w
0175デフォルトの名無しさん
NGNGそういうのは多重継承とはいわんよ。
単に集約してるといえばいいのさ
0176Java太郎 ◆DMVtSSFzcg
NGNGあなた頭いいでしょ?
わかる!!わかるんだよ・・・オレには。
多重継承ではないと、後から気づきましたよ!
ハッハッハ、こりゃ一本取られましたなw
集約なんだ・・・勉強になりました。
0177デフォルトの名無しさん
NGNG多重継承ができない代わりか
どうか知らんけど、
implemetsというキーワード
を提供しているが、それによって
良くなった点と悪くなった点を
誰か挙げてくれないか?
0178デフォルトの名無しさん
NGNGimplementsはクラスへのinterface実装専用。
悪くなった点 : ちょっと記述が長くなったという程度。
MixJuiceやRubyのようなモジュール分割がしにくい。
よくなった点 : クラス継承においてダイヤモンド継承によるメソッドやフィールドのバッティングの心配がなくなった。
インターフェースがインターフェースを継承する場合は、この問題は起こりうるので要注意。
実装の多重継承は混乱のもとといわれてきた。それをコンパイラが禁止することで
プロジェクトでこっそり実装の多重継承をするプログラミングをさせないことで
バッティング問題を解消できる。
0179デフォルトの名無しさん
NGNGバッティングの心配とかを抜きにすれば、
多重継承できない事でコーディング量が増えたり
不便になったという事は考えられるんでない?
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGまあ、広域変数とgoto文もそうだけど、誰が使ったか、
影響があるのはどこかを完全に把握してれば問題は回避できるけど、
分からなくなったらグチャグチャになったら取替えしが
つかないってことだよね。
おれは予防のコストはあとから大変になることを考えれば十分に見合う気はする。
特に複数の人でプロジェクトを進める場合はね。
でも、このコスト感覚は人によって違うと思う。
0182デフォルトの名無しさん
NGNG実装の多重継承の危険性はソフトウェア工学の研究で実証済み
0183デフォルトの名無しさん
NGNGだから、危険か危険じゃないかは人によって違うだろ。
使う人間によっては便利にもなるし、危険にもなる。
そもそも、お前のように自分の観点でしか物を見れない
奴がいるから危険なんだよ、バーカ。
0184デフォルトの名無しさん
NGNG多人数が同時に書いたり使ったりだと大変だろう。
0185デフォルトの名無しさん
NGNG逆に減ることもあるわけでな
0186デフォルトの名無しさん
NGNGinterfaceでは完全に代替できない。
コードの再利用という観点からすれば
実装を継承できるのとできないとでは
やっぱ色々と違うでしょ
0187デフォルトの名無しさん
NGNG手続き型言語のサブルーチンじゃだめなの?
どこから呼び出しても使える便利なサブルーチンをたくさん作ってさ、あとはメインルーチンからどれをどう呼び出すかだけプログラムすればいいようにすれコーディングは十分ラクできるじゃん。
オブジェクト指向はさらに何をラクしたくてできた言語なわけ?
よくできたサブルーチン集を作ることとの決定的な違いってなによ?
0188デフォルトの名無しさん
NGNGあと、オブジェクト指向は言語じゃない
0189デフォルトの名無しさん
NGNGコードの再利用とか不必要な情報の隠蔽とか利点はいろいろあると思う。
まあ特に必要を感じないんだったら従来どおりにやればいいと思うよ。
0190デフォルトの名無しさん
NGNG低能な突っ込みやめれ。
言いたいことは解るだろう?
0191デフォルトの名無しさん
NGNGしたがって、オブジェクト指向型の言語は必須ではない。
しかし、オブジェクト指向型言語は、モジュールの完成度を高めるための支援を言語レベルで行う。
いわゆる勘違いによる間違いが減る。それだけである。が、これは圧倒的な生産性の向上を意味する。
よく出来たサブルーチンを作れる人ならば、オブジェクト指向の支援を便利に感じるであろう。
まずは良く出来たサブルーチンの条件、モジュール強度と
モジュール結合度などから学びはじめるのが良いだろう。
0192デフォルトの名無しさん
NGNGそれだけじゃないと思うが(w
0193デフォルトの名無しさん
NGNGもう無理にオブジェクト指向を理解しなくてもいいと思う
しょうがないよ、脳みその出来は個人差があるんだから
世の中にはポインタですら理解できない人もいるんだから
0194デフォルトの名無しさん
NGNG生産性。
OOPだと、ポリモーフィズムとか、色々融通が利く。サブルーチンではこうもすっきり
いかないで、引数の型違いとかの名前や内容が微妙に違う関数とかを作らなくては
ならないケースが出てしまい、それを使う側のコードもそれ用に書かなければならず、
その手間が面倒になり、結果、生産性が落ちる。
OOでは、インターフェースさえきちんと設計しておけば、メンテはめっちゃくちゃ楽。
・・・とかいいつつ、全然初心者だったりする儂。
0195デフォルトの名無しさん
NGNG短絡的な意見ありがとうございます。
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGstruct 女;
void 男絶頂(){}
void 女絶頂(){}
class 人間{
絶頂()
}
class 男:人間{}
class 女:人間{}
人間.絶頂()
手続きだと性別ごとに絶頂を呼び出さないとだめだが、オブジェクト指向でクラスをつかい継承すると絶頂が1つで済む。
0198デフォルトの名無しさん
NGNG構造化手法だけではカプセル化という概念を導入できない。
UMLかJavaの勉強をすればオブジェクト指向を素早く理解できる。
構造化手法だけでは各コンポーネント間の結合度を凝集度を下げることは
容易ではない。
各ソフトウェアコンポーネントは互いに低い結合度で結びつきあっていることが望ましい。
一つのコンポーネントは互いに関連のある責務だけから形成されていることが望ましい。
これが構造化手法の研究成果であるという。
0199デフォルトの名無しさん
NGNG派生しているとして、sex() はOO的にどこに実装されるのが
妥当ですか?
0200デフォルトの名無しさん
NGNGsexは名詞というの分かっているか?
0201199
NGNG0202デフォルトの名無しさん
NGNGしかし、この分析はよくある間違いです。
Sexは誰かが持っているものでもないし、何人でやる行為であるかさえ決まっていないからです。
Sexとは柔軟で複雑な関係のことを指す言葉です。
従って、関係を表すSexインターフェイスを作り、NomalSexオブジェクトを実装するかたちにしたほうが良いでしょう。
参加者はentryメソッドで集い、startメソッドで宴が始まるのです。
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNGpublic static final UNKNOWN = 0;
public static final MALE = 1;
public static final FeMALE = 2;
public static final HOMOSEXUAL = 3;
private int sex;
public Sex(int sex) throws SexException {
try {
if(0 <= sex & sex <= 3)
this.sex = sex;
} else {
throw new SexException("そんな性別はありません");
}
} catch(SexException e){
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}
public int getSex(){
return sex;
}
}
public class Person {
private Sex sex;
private String name;
public Person(String name, Sex sex){
this.sex = sex;
this.name = name;
}
}
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGpublic String getPenisSize();
}
public abstract class Man implements Penis{}
public class Takeshi extends Man implements Penis {
public String getPenisSize() { return "大きい";}
}
public class Masaru extends Man implements Penis {
public String getPenisSize() { return "小さい";}
}
public class Woman {
public void sex( Penis p ) { System.out.println( "あなたの ちんこ" + p.getPenisSize() + "のね" ); }
}
Woman woman = new Woman();
woman.sex( new Takeshi() );
woman.sex( new Masaru() );
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG近い形でコンピュータ上にモデル化すること。
現実社会がコミュニケーションで成り立っているように、
オブジェクト同士もメッセージのやり取りで成り立つ。
メッセージパッシングこそ、オブジェクト指向のエッセンス。
継承なんかは後付けの考えだ。
これは、例を挙げれば、俺が弁当屋に行って海苔弁を買い、
おもちゃ屋に行ってPS2を買うというのを、素直にモデル化するなら、
「弁当屋」「おもちゃ屋」「海苔弁」「PS2」「お金」「注文」
というオブジェクトが出てくる。
「弁当屋」に「お金」と「注文」を渡せば、「海苔弁」が、
「おもちゃ屋」に「お金」と「注文」を渡せば、「PS2」が、
それぞれ返ってくる。
いわゆる
海苔弁 弁当屋.売れ(お金, 注文)
PS2 おもちゃ屋.売れ(お金, 注文)
となる。
これがオブジェクト指向の基本。
(つづく)
0211デフォルトの名無しさん
NGNG唐揚げ弁当や焼き肉弁当もある。
ここで頭の良いヤシは、海苔弁と唐揚げ弁当と焼き肉弁当の
共通点に気が付く。どれも弁当だと。単におかずの違いだと。
そこで、「弁当」をもっと考えてみる。
「弁当」は「おかず」と「ごはん」から構成されていて、
「値段」がついていると。
海苔弁の場合は
「ごはん」コシヒカリ
「おかず」海苔
「値段」280円
であり、
焼き肉弁当の場合は
「ごはん」コシヒカリ
「おかず」焼き肉
「値段」480円
であると。
オブジェクト指向では、この場合「弁当」をクラスといい、
「ごはん」「おかず」「値段」などをクラスの属性という。
そして「弁当」を考え出したことで、より汎用的な
次のメッセージが出来ることに気がつく。
弁当 弁当屋.売れ(お金, 注文)
(つづく)
0212デフォルトの名無しさん
NGNG共通点があることに気がつく。いわゆる「商店」であり、
なんらかの「商品」を売って、「お金」をもらうのであると。
「商店」をより具体化した「弁当屋」は弁当という商品を売る商店であり、
「おもちゃ屋」はおもちゃという商品を売る商店であったのである。
オブジェクト指向では、こういう場合、
「商店」と「弁当屋」は継承関係にあるといい、
「商店」をスーバークラス、基底クラスなどといい、
「弁当屋」をサブクラス、派生クラスなどとのたまう。
思考の流れとは逆なのが面白いだろう。
(つづく)
0213デフォルトの名無しさん
NGNGちょっと値段の高い味美弁当屋もある。バイト代が入って懐が暖かい
ときは、味美弁当屋にかぎる。こういう風に、実際に行く弁当屋は
一軒一軒具体的な違いを持っている。
オブジェクト指向では、ほかほか亭や味美弁当屋を「弁当屋」クラスの
具体的な実体、すなわちインスタンスと考える。
紙に書いた弁当屋では弁当は買えない。実際の弁当屋に行かなければ。
すなわち、基本的にはインスタンスに対してメッセージを送ることで
処理は進められていく。
クラスは、インスタンスの雛形であり、インスタンスを作るのに
利用されるというのが基本である。
もし君が弁当屋をはじめるなら、他の弁当屋を参考にするだろう。
そういうことである。
(つづく)
0214デフォルトの名無しさん
NGNGレアものビデオ 友達.売れ(注文,お金)
というわけである。ここでヤシは思索する。
はたして、友達は「商店」なのかと。
しかし、時には「商店」と同じようにものを売ってくれると。
「売れ(注文,お金)」というメッセージは、「商店」だけじゃなく、
友達にも通用すると。
それじゃ、そのメッセージだけ切り出して、「買い物」という
名前にしておこうと。
オブジェクト指向では、この「買い物」をインタフェースとよび、
「買い物」が出来る相手なら誰にでも
「売れ(注文,お金)」というメッセージを送ることができる。
「友達」が「商店」ではないように、
インタフェースを使うことで、継承関係を超えて、
ダイナミックなモデルを実現できるのだ。
そして「友達」はいつも「買い物」のインタフェースでいるわけではなく、
いろんなインタフェースを使ってこのヤシと関係を作り上げている。
さらに、「友達」は親に対しては「息子」のインタフェース、
先生に対しては「生徒」のインタフェースを使っているかもしれない。
0215デフォルトの名無しさん
NGNG別にいいけど。。。
どんどん書いてくれ
0216デフォルトの名無しさん
NGNGもう慣れたが。
0217デフォルトの名無しさん
NGNG0218なおしとけ
NGNGpublic String getPenisSize();
}
public abstract class Man implements Penis{}
public class Takeshi extends Man {
public String getPenisSize() { return "大きい";}
}
public class Masaru extends Man {
public String getPenisSize() { return "小さい";}
}
public class Woman {
public void sex( Penis p ) { System.out.println( "あなたの ちんこ" + p.getPenisSize() + "のね" ); }
}
Woman woman = new Woman();
woman.sex( new Takeshi() );
woman.sex( new Masaru() );
0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNGグローバル変数だらけです
0222デフォルトの名無しさん
NGNGどういう喩えでつか?
0223デフォルトの名無しさん
NGNG要は本棚とか無いんじゃないの?
0224なんとなく
NGNGなんで/TakeshiとMasaruだけ固有名詞のクラスになってんのかね。
s/Takeshi/LargePenisMan/
s/Masaru/SmallPenisMan/
0225デフォルトの名無しさん
NGNGpublic class Hiroshi extends Okama {
public String getPenisSize() { return "取っちゃった";}
}
Woman woman = new Woman();
woman.sex( new Hiroshi());
何故ManクラスからPenis Interfaceを分離してるかと言えば、
Manクラスの他にもgetPenisSizeメソッドを持つクラスを拡張させられるようにするためである。
もし仮にManクラスにgetPenisSizeメソッドを持たせてあると、このような拡張は不可能である。
これがInterfaceを分離することのメリットである。
0226デフォルトの名無しさん
NGNGchinko インターフェースをつくって
Manと ButterDog の両方にインプリメント(実装)すべきだということだな。
このやりかたなら、将来、バイブレーターを作ったときも、同じインターフェースが使える。
バイブレーターと Man は継承関係の必然性がないし。
0227デフォルトの名無しさん
NGNG抽象化のセンス無し
0228デフォルトの名無しさん
NGNGいやーわかりやすい。(w
0229デフォルトの名無しさん
NGNGpublic abstract class Man implements Penis{}
はどういう意味、働きをもってくるの?
0231デフォルトの名無しさん
NGNGこれって多重継承に似ているね。
引数でクラス名を渡しているところが異なるだけで、
クラスを隠蔽化する為に、Java開発者が無理やりinterfaceやabstractを
とってつけたみたいだ。
なぜなら、Javaは全てクラスで表現するという制約を自ら課しているから。
0232デフォルトの名無しさん
NGNGpublic void sex( Penis p ) { System.out.println( "あなたの ちんこ" + p.getPenisSize() + "のね" ); }
}
は、Penisを引数の型に使っても起こられない?
0233デフォルトの名無しさん
NGNGManという言葉があっても、それは単に概念とか分類であって
実際にManという"物"が存在する訳ではない。
TakeshiやHiroshiは"物"として存在するが、Manは存在しないという事。
でも後々、TakeshiやHiroshiを個人の単位ではなく、
Manという分類で扱いたくなるかもしれない。
0234デフォルトの名無しさん
NGNG言葉の意味から考えれば、
public void sex( Man m )
が相応しい。
或いは、
public void insert( Penis p )
など。
0235デフォルトの名無しさん
NGNGそもそもhas-aの関係にあるものをそうやってimplementsする
形式にすべきかも疑問。
それじゃis-aの関係になってしまう。
"He is a penis."
集約、コンポジション集約で十分ではないか?
>>231
>なぜなら、Javaは全てクラスで表現するという制約を自ら課しているから。
オブジェクト指向だから当たり前。JavaソースはUMLクラス図でちゃんと表現できる。
C++のソースはどんなソースでもクラス図で表現できるとは限らない。
interfaceやabstract同様の機能はM$がJavaを真似て作ったC#でも取り入れられている。
0236デフォルトの名無しさん
NGNGPenisはHourseにだってimplementsできる。
woman.sex( new Hourse )とか、、
そんな獣姦ビデオとかあるし。
0237デフォルトの名無しさん
NGNGそういうSEは結構いたな。
抽象化ってのは別部分の能力なんだろうか。
要は分類だよな。
0238デフォルトの名無しさん
NGNG>abstract同様
抽象クラスと純化相関数入りのクラスにどれほどの違いがあるんですか?
0239デフォルトの名無しさん
NGNG抽象クラスにも実装済みで継承可能なメソッドを入れることができるでしょう。
抽象クラスは中に少しでもabstractなメソッドがあればクラスも抽象(abstract)と見なされる。
抽象クラスは継承した具象クラスがないと使えない。
抽象クラスはインスタンスを作れない。
Javaには仮想関数という用語は無い。
Javaはvirtualをつけなくても継承できる。
変わりにfinal宣言をすると継承を禁止する。
いうまでもなく、finalとabstractを併用することはできない。
つーか純仮想関数って何?
UMLでもそんな言葉聞きません。
0240デフォルトの名無しさん
NGNGSヨ板がいまだに学問・理系カテにありますから・・・。
0241デフォルトの名無しさん
NGNGC++も知らないくせにC++との差別化とかほざいてるわけか。浅いな。そこが。
0242デフォルトの名無しさん
NGNG純粋仮想関数の typo だと思われ
0243デフォルトの名無しさん
NGNGJavaも知らないくせにJavaを批判しているわけか。浅いな。そこが。
そもそも純仮想関数という言葉もUMLでは通じないぞ。
C++の用語はUMLでは殆ど死語と化している。
0244デフォルトの名無しさん
NGNG言語機能とオブジェクト指向用語とごっちゃになってない?
0245デフォルトの名無しさん
NGNGC++の場合オーバーライドし忘れてもコンパイルエラーにならないのか。
Javaだとエラーが出てくれるのでメンテナンスが楽。
C++ではこう定義するのか
virtual void doMethod() = 0;
ちょっと奇怪に見え
0246デフォルトの名無しさん
NGNGもちろん言葉は大切、慎重に選んで使わなきゃならないが、
ここで重要なのは指向または志向または思考なわけで、
大体のニュアンスが伝わればなんら問題ない。
0247デフォルトの名無しさん
NGNGエラーになるよ。純粋仮想関数を含んだクラスのインスタンスは
生成できないし、それを継承したクラスが純粋仮想関数をオーバー
ライドしなければやっぱりインスタンスは生成できない。
0248デフォルトの名無しさん
NGNG>
>ちょっと奇怪に見え
確かに。
vtable へのポインタを 0 で初期化するという意味らしい。
0249デフォルトの名無しさん
NGNGじゃあ「interface Penisable」だったらいいのか?
0250書き直し
NGNGpublic String getPenisSize();
}
public abstract class Man implements Penisable{}
public class Takeshi extends Man {
public String getPenisSize() { return "大きい";}
}
public class Masaru extends Man {
public String getPenisSize() { return "小さい";}
}
public class Woman {
public void sex( Penisable p ) { System.out.println( "あなたの ちんこ" + p.getPenisSize() + "のね" ); }
}
Woman woman = new Woman();
woman.sex( new Takeshi() );
woman.sex( new Masaru() );
その後、Okamaクラスを追加する必要が出てきた。
public abstract class Okama implements Penisable{}
public class Hiroshi extends Okama {
public String getPenisSize() { return "取っちゃった";}
}
Woman woman = new Woman();
woman.sex( new Hiroshi());
0252デフォルトの名無しさん
NGNG陰根可能
■ このスレッドは過去ログ倉庫に格納されています