Androidプログラミング質問スレ revision42at TECH
Androidプログラミング質問スレ revision42 - 暇つぶし2ch734:デフォルトの名無しさん
14/05/09 12:59:45.31 tWaOHo+l
>>729
オレはキミの文章がロシア語に見える

735:デフォルトの名無しさん
14/05/09 13:18:00.59 4zx449Wa
>>729
この1文だけですむじゃねーか
>結局のところoverrideってどう理解すれば良いのでしょうか?

派生元側の処理を上書きするのがoverride

例えば自動販売機クラスから派生させたジュース販売機クラスがあったとする
来週、5000円札が新しくなるから、紙幣認識ルーチンを新札対応にしなきゃいけない
紙幣認識は自動販売機クラス側。本当は自動販売機クラスを変更するのがいいけど既成品だからいじれない
しょうがないから、ジュース販売機クラス側で紙幣認識処理をoverideして新札対応にする
みたいなイメージ

736:デフォルトの名無しさん
14/05/09 13:24:41.69 G9UvA59W
>>729
継承した親メソッドに渡すことも渡さないのも自由
親メソッドに仕事させたきゃ渡すがよい

737:デフォルトの名無しさん
14/05/09 13:28:36.37 tWaOHo+l
>>735
これだと
(1)ジュースの自動販売機の数だけ修正が必要になる
(2)新札対応はジュースの自動販売機だけじゃダメだから自動販売機クラスの修正が必要になる
と、突っ込んでみる

738:デフォルトの名無しさん
14/05/09 13:50:18.30 0AelA5vg
eclipceで作ったAndroidアプリをiOSアプリでも動作する形に変換する手段てありますか?

739:デフォルトの名無しさん
14/05/09 13:52:50.98 YMahCFOL
>>737
>自動販売機クラスを変更するのがいいけど既成品だからいじれない
と言ってる
まあ例えが下手すぎるね
>>729
overrideの本質ってのは多態性の実現
superのメソッドを修正する用途が目的ではない

740:デフォルトの名無しさん
14/05/09 13:53:19.00 tWaOHo+l
>>738
あります

741:デフォルトの名無しさん
14/05/09 13:54:59.87 E87ZNm2F
全然本質的でない突っ込み乙

742:729
14/05/09 15:03:35.71 vJl9TGVD
ダラダラと変な質問の仕方してすいませんでした。
結局、自分が引っかかてるのは
overrideしたメソッドの引数に入ってる情報は
どこでどうやって入ってるのでしょうか?

743:デフォルトの名無しさん
14/05/09 15:32:19.61 caBxZDB7
overrideしていないメソッドの引数はどこでどうやって入ってるかわかりますか?
それと同じです。

744:デフォルトの名無しさん
14/05/09 15:34:14.50 b2KKsywf
オーバーライドしたメソッドがあるクラスのインスタンスを使って
そのメソッドを呼び出したときに指定した引数が渡される

# スーパークラスA
class A {
int x = 0;
void set( int n ) { x = n; }
}

# Aの派生クラスB
class B extends A {
void set( int n ) { x = n + 1; } // override
}

A obj = new A();のとき
obj.set(1);ならA::.set()が呼ばれるのでobj.x=1;

A obj = new B();のとき
obj.set(1); ならB::set()が呼ばれるのでobj.x=2;

745:デフォルトの名無しさん
14/05/09 16:40:23.00 UECWTZoN
>>744
>A obj = new B();のとき

あ、いつもB obj = new B();ってやってた気がする。
もしかして間違ってたことしてた?

746:デフォルトの名無しさん
14/05/09 16:52:52.57 jlAlihm7
別にそれでいいよ
Aを要求してる場所にもBを使えるってだけだ

747:デフォルトの名無しさん
14/05/09 17:13:29.34 3qzXyrX7
>>740
お教え頂きたいです

748:729
14/05/10 05:40:18.62 Et3qzB7B
スレ汚しになるので、これで質問やめとこうと思いますが
例えばFragmentをextendsしたクラスで
public class NewFragment extends Fragment {

public NewFragment() {
// TODO 自動生成されたコンストラクター・スタブ
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO 自動生成されたメソッド・スタブ
View v = inflater.inflate(レイアウト名, container, false);
return v;
}


}
が、あって
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
の引数のinflaterとcontainerを使ってViewを返しますが
この二つの引数のインスタンスが、どこで作られ渡されてるのかが解かりません
そこで、Overrideの引数の情報は、どこでどうやって入ってるのでしょうか?
最後のご教示願います。

749:デフォルトの名無しさん
14/05/10 05:55:19.79 uXL7VUef
onCreateViewを呼ぶところが(場合によっては作って)渡してきてる
Overrideとか無関係。クラスも無関係

関数って何?引数って何?ってところをまずは勉強したほうがいいよ

750:デフォルトの名無しさん
14/05/10 06:43:28.08 +dr00g6E
>>748
FragmentのonCreateViewはUIを始めて描画したタイミングで
システムからコールバックされるメソッドなので、これらの引数は
システムから渡されるものって思っていればいいんじゃない?
これ気にしだすと、たとえばActivity::onCreate()とonResume()はどこから呼ばれてるとか
そういうもっとコアな話になるよ。

751:デフォルトの名無しさん
14/05/10 06:58:39.67 sCj8eUFq
アンテナから流れてくる電波信号をチューナーにつなげて、ビデオ信号に変えて
ビデオデッキにつなげて、テレビにつなげて、映像が出力されるでしょ。

onCreateViewは、ビデオデッキなのだよ。
何もしなければ、
チューナーから流れてきたビデオを信号を、そのままテレビに送ってるだけ。

ビデオデッキをオーバーライドして、いろいろ回路を組めば、
テレビ映像の色味を調整したりとか、ビデオ信号のコピーガードを外すとかできるわけだ。

752:729
14/05/10 08:07:38.48 Et3qzB7B
>>750
なるほど
コールバックメソッドとして
システムからわたされるという事ですか。
例えば、layoutのxmlでボタンを追加して
onClickにメソッド名を書き
実装したそのメソッドは
システム側で処理されてますし。
レスありがとうございました。
>>749
一応、javaに関しては、java se7 programmer silver
持ってるレベルでプログラミング歴は
C言語から初めてC++,java(基礎),C#と勉強してきて
今、Androidを通じて、javaの再勉強とAndroidの勉強
してる感じで、10年以上になります。
結局、Androidのoverrideで引っかかってたのは
overrideした引数にあるインスタンスが
どこで生成されてたのかが疑問でした。
でも、コールバックメソッドという事
がわかったので、納得です。

753:デフォルトの名無しさん
14/05/10 08:30:09.02 u9ABRTJD
>>752
10年でそのレベルかよ…、向いてないんじゃね

754:デフォルトの名無しさん
14/05/10 08:42:21.48 Qw8OLsYZ
まったく同じこと思ったが
まぁ趣味でやってるんだろうし、別にいいんじゃねーの。

変な質問を繰り返されるのは困るけど。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch