Java入門:第13回 親クラスのメソッドの実行とstaticメソッドの実行
親クラスのメソッドの利用
前回は主に継承とオーバーライドについて解説しました。実際のAndroidプロジェクト生成されるコードには次のような記述があります。
setContentView(R.layout. activity_main);
いきなりsetContentView()といメソッドが出てきます。このメソッドはコンテンツ(Cntent)の見た目(View)をセットするということで画面をセットしているということはなんとなく理解できると思うのですが、なぜこのメソッドが利用できるのは余り詳細に説明がないまま話が進むことが多いです。そこで模擬的に作成しているクラスを修正し、このsetContentView()メソッドを実装してみましょう。
public class MyAppActivity extends Activity{
void onCreate() {
super.onCreate();
setContentView( "私の画面の見た目" );
}
}
すると当然、setContentView()メソッドは定義されていないので、コンパイルエラーとなります。なぜ実際のAndroidプロジェクトではこのsetContentView()メソッドが記述できるかというと、これはActivityクラスに定義されているメソッドを利用しているからなのです。模擬的なActivityクラスにsetContentView()メソッドを追加してみましょう。
public class Activity {
String message = "こんにちは";
void setContentView(String msg) {
System. out.println( "画面をセットしました=" + msg);
}
//~略~
mainメソッドが記述されているHelloクラスから呼び出すと次のように表示されます。
public class HelloWorld {
static public void main(String [] args) {
Activity actA = new MyAppActivity();
actA. message = "おはようございます" ;
actA.onCreate();
}
}
onCreateです
おはようございます
画面をセットしました=私の画面の見た目
このように、継承を行うことによって、
1. メソッドを再定義(オーバーライド)しもともとある動作を変更する
2. 親クラスのメソッドを利用する
の2つを行うことができるようになります。
staticメソッドの利用
ところで、Androidアプリケーションの開発ではログを利用してアプリケーションの動作を確認することができます。例えば次のように記述します。
Log.d( "TAG", "ここが実行されました" );
これはActivityクラスのメソッドではなくて、Logクラスのd()というメソッドを実行しているのです。そこでLogクラスを作成してd()メソッドを実装してみましょう。
public class Log {
void d(String tag, String msg) {
System. out.println( "tag=" + tag + ":メッセージ=" + msg);
}
}
Logクラスを作成し、d()メソッドを作成したのですが、エラーが解消されません。Javaでは別のクラスのメソッドを実行する場合は、オブジェクトを生成してから実行しなければなりません。次のように記述する必要があるはずです。
public class MyAppActivity extends Activity{
void onCreate() {
super.onCreate();
setContentView( "私の画面の見た目" );
Log log1 = new Log();
log1.d( "目印" , "出力したいメッセージ" );
}
}
オブジェクトは複数生成可能ですから、次のようにも記述可能です。
Log log1 = new Log();
log1.d( "目印" , "出力したいメッセージ" );
Log log2 = new Log();
log2.d( "目印" , "出力したいメッセージ" );
しかし、出力される結果は共に
tag=目印:メッセージ=出力したいメッセージ
tag=目印:メッセージ=出力したいメッセージ
となります。実際のAndroidプロジェクトではLogCatにメッセージが出力されるだけになります。この場合、オブジェクトをわざわざnew演算子で生成しなくても問題ないように思います。このようなときはメソッドにstatic修飾子をつけるとクラス名を利用してメソッドを実行できるようになります。staticとは静的なという意味で、クラスそのものに属するメソッドになります。
public class Log {
static void d(String tag, String msg) {
System. out.println( "tag=" + tag + ":メッセージ=" + msg);
}
}
とstaticを付加すると、次のように呼び出すことができます。staticはメソッドの他にフィールドに付加することもできます。
Log. d("目印" , "出力したいメッセージ" );
つまり、クラス名(たいてい大文字で始まる単語)の後にピリオドが続き場合は、そのクラスに属しているメンバ(メソッドやフィールド)にstaticにアクセスしていることになります。
まとめると
- 継承している場合、親クラスのメソッドを実行することができる
- staticなメソッドはオブジェクトを実行することができる
となります。逆に言うと、上記以外はオブジェクトの生成が必要になるということになります。そして、オブジェクトの生成は基本的にnew演算子を利用して生成します。
Author And Source
この問題について(Java入門:第13回 親クラスのメソッドの実行とstaticメソッドの実行), 我々は、より多くの情報をここで見つけました https://qiita.com/YasushiIizuka/items/9914afd48d15555a994e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .