Java SE7 Gold 取得を目指して (2)
Java SE7 Gold をとりたい…!
本日は第2回目です。
本日知ったこと(2章)
-
可変長引数
- 可変長引数を持つメソッドより、引数を明示的に指定したメソッドの方が優先して呼ばれる
// obj.method(10, 20); void method(int... args) { } void method(int a, int b) { }; // ← こっちが呼ばれる
- メソッドがオーバーロードされた場合、以下の順で上から一致するものが探される
// obj.method(10); // 完全一致 void method(int a) { } // 暗黙の型変換 void method(long a) { } // オートボクシング void method(Integer a) { } // 可変長引数 void method(int... a) { }
-
継承・実装
- 抽象クラスのstaticメンバは、
AbstClass.staticMethod()
で呼べる - 同一名のメンバを持つことができるが、使う際は明示的にクラス名を指定しないとコンパイルエラー
interface I { String str = "X"; } class Super { static String str = "Super"; } class Sub extends Super implements I { public void print() { // System.out.print(str); System.out.print(I.str); System.out.print(Super.str); } }
- Superオブジェクト型でSubクラスを保持した場合、非staticメソッド以外は親クラスのメンバが呼ばれる
class Super { String str1 = "Super val"; static String str2 = "Super static val"; void method1() { System.out.println("Super method"); } static void method2() { System.out.println("Super static method"); } } class Sub extends Super { String str1 = "Sub val"; static String str2 = "Sub static val"; void method1() { System.out.println("Sub method"); } static void method2() { System.out.println("Sub static method"); } } Super obj = new Sub(); System.out.println(obj.str1); // Super val System.out.println(obj.str2); // Super static val obj.method1(); // Sub method obj.method2(); // Super static method
- 抽象クラスのstaticメンバは、
staticメソッドを同一シグネチャで上書きすることは、オーバーライドではなく隠蔽と呼ぶらしいです。隠蔽、メダロットで覚えた言葉ですね。
Author And Source
この問題について(Java SE7 Gold 取得を目指して (2)), 我々は、より多くの情報をここで見つけました https://qiita.com/tomoki1207/items/e993cf7714163bfb35a7著者帰属:元の著者の情報は、元の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 .