Javaのクラスとオブジェクトの概念をテストするために、以下のコードを書きました。
public class ShowBike {
private class Bicycle {
public int gear = 0;
public Bicycle(int v) {
gear = v;
}
}
public static void main() {
Bicycle bike = new Bicycle(5);
System.out.println(bike.gear);
}
}
コンパイルプロセスで以下のエラーが発生するのはなぜですか?
ShowBike.Java:12: non-static variable this cannot be referenced from a static context
Bicycle bike = new Bicycle(5);
^
ShowBike.Bicycle
を静的にします。
public class ShowBike {
private static class Bicycle {
public int gear = 0;
public Bicycle(int v) {
gear = v;
}
}
public static void main() {
Bicycle bike = new Bicycle(5);
System.out.println(bike.gear);
}
}
In Javaがあります ネストされたクラスの2つのタイプ : "静的なネストされたクラス"および "内部クラス" 。static
キーワードは内部クラスであり、ShowBike.Bicycle
にアクセスするにはShowBike
のインスタンスが必要です。
ShowBike showBike = new ShowBike();
Bicycle bike = showBike.new Bicycle(5);
静的なネストされたクラスと通常の(ネストされていない)クラスの機能はほぼ同じで、グループ化する方法が異なります。ただし、静的なネストされたクラスを使用する場合、それらの定義を個別のファイルに配置することはできません。これにより、多くのクラス定義を含む単一のファイルが作成されます。
自転車は内部クラスなので、次のような内部クラスインスタンスを作成するには外部クラスインスタンスが必要です。
ShowBike sBike = new ShowBike();
Bicycle bike = sBike.new Bicycle(5);
または、単にBicycle
クラスをstatic
として宣言して、現在の方法を機能させることができます。
Mainメソッドは、そのクラスの非静的メンバーにアクセスできません。
ところで、クラスは動詞ではなく名詞にちなんで命名する必要があります。それを行うより良い方法は次のとおりです。
private class Bicycle {
public int gear = 0;
public Bicycle(int v) {
gear = v;
}
public void showGear() {
System.out.println(gear);
}
public static void main(String[] args) {
Bicycle bike = new Bicycle(6);
bike.showGear(); // Notice that the method is named after a verb
}
}
内部クラスの状態の外部クラスオブジェクトを作成する必要があります。または、内部クラスを静的として作成する必要があります。したがって、内部クラスの場合、オブジェクトは不要です。
Bicycleクラスは静的ではないため、非静的メソッドでは使用できません。メインメソッドで使用する場合は、それを
private static class Bicycle