キーワードdefaultを使用してクラスのデフォルトを宣言できますか?例えば:
default class Test{
}
と呼ばれるアクセス修飾子はありdefault
ません。クラスまたはメソッドに修飾子を指定しない場合、暗黙的に、デフォルトでパッケージプライベートになります。
ただし、Javaには、ステートメントdefault
で使用されるキーワードがあります。switch
case
提供されたオプションがどのような場合でも、デフォルトの動作を指定した場合は、それが使用されます。
例えば、
public class SwitchDemo {
public static void main(String[] args) {
int month = 8;
String monthString;
switch (month) {
case 1: monthString = "January";
break;
case 2: monthString = "February";
break;
case 3: monthString = "March";
break;
case 4: monthString = "April";
break;
case 5: monthString = "May";
break;
case 6: monthString = "June";
break;
case 7: monthString = "July";
break;
case 8: monthString = "August";
break;
case 9: monthString = "September";
break;
case 10: monthString = "October";
break;
case 11: monthString = "November";
break;
case 12: monthString = "December";
break;
default: monthString = "Invalid month";
break;
}
System.out.println(monthString);
}
}
ここで、無効な月を指定すると、デフォルトのセクションに分類されます。
java 8に付属する新機能があり、デフォルトのキーワードを使用して、インターフェイスでメソッドを定義できます。
interface I {
public default void show() {
System.out.println("Hello");
}
}
Java8JLS-13.5.6で説明されています。インターフェイスメソッドの宣言
デフォルトのメソッドを追加したり、メソッドを抽象からデフォルトに変更したりしても、既存のバイナリとの互換性は失われませんが、既存のバイナリがメソッドを呼び出そうとすると、IncompatibleClassChangeErrorが発生する可能性があります。このエラーは、修飾タイプTが2つのインターフェイスIとJのサブタイプであり、IとJの両方が同じ署名と結果を持つデフォルトのメソッドを宣言し、IもJも他方のサブインターフェイスではない場合に発生します。
「クラスまたはメソッドに修飾子を指定しない場合、暗黙的に、デフォルトでパッケージプライベートになります」というステートメントは完全に間違っています。クラスがプライベートの場合、そのクラスは同じパッケージ内でもアクセスできません。ただし、アクセス指定子について言及しない場合、パッケージ内でアクセスできるクラスがデフォルトとして使用されます。