素人質問で申し訳ないです。車両をカプセル化する抽象的なスーパークラス(Vehicle.java)、車両には、所有者の名前と車輪の数。 このクラスには、2つの非抽象サブクラスがあります。1つは自転車をカプセル化する(Bicycle.java)、もう1つは自動車をカプセル化する(Motorizedvehicle.java)、この自動車のクラスには、エンジン排気量(リットル)。 馬力の測定値を計算して返す方法、リットル数×車輪数。 これら2つのクラスをテストするためのクライアントクラス(VehicleClient.java)を作りました。しかし
、クライアントクラスが実行されると、コンパイルと実行時にエラーは発生しませんが、画像の通り車輪の数が0になってします。Motorizedvehicleオブジェクトの結果は正しくないようです。どなたかなぜかわかる方いらっしゃいますでしょうか。
以下ソースコードになります。
親クラス public abstract class Vehicle { private String owner; private int wheels; public Vehicle( String owner, int wheels ) { setOwner( owner ); setWheels( wheels ); } public String getOwner( ) { return owner; } public int getWheels( ) { return wheels; } public void setOwner( String owner ) { this.owner = owner; } public void setWheels( int weels ) { if ( wheels >= 0 ) this.wheels = wheels; } public String toString( ) { return( "Owner: " + owner + "; number of wheels: " + wheels ); } public boolean equals( Object o ) { if ( ! ( o instanceof Vehicle ) ) return false; else { Vehicle v = (Vehicle) o; return ( owner.equalsIgnoreCase( v.owner ) && wheels == v.wheels ); } } }
子クラス(自動車)public class MotorizedVehicle extends Vehicle { private double volumeDisplacement; public MotorizedVehicle( String owner, int wheels, double volumeDisplacement ) { super( owner, wheels ); setVolumeDisplacement( volumeDisplacement ); } public double getVolumeDisplacement( ) { return volumeDisplacement; } public void setVolumeDisplacement( double volumeDisplacement ) { if ( volumeDisplacement >= 0 ) this.volumeDisplacement = volumeDisplacement; } public String toString( ) { return( super.toString( ) + "; volume displacement: " + volumeDisplacement ); } public boolean equals( Object o ) { if ( ! ( o instanceof MotorizedVehicle ) ) return false; else { MotorizedVehicle mv = (MotorizedVehicle) o; return ( super.equals( mv ) && Math.abs( volumeDisplacement - mv.volumeDisplacement ) < 0.0001 ); } } public double horsePower( ) { return ( volumeDisplacement * getWheels( ) ); } }
子クラス(二輪車) public class Bicycle extends Vehicle { public Bicycle( String owner, int wheels ) { super( owner, wheels ); } }
クライアントクラス public class VehicleClient { public static void main( String [] args ) { // Line below would generate a compiler error // Vehicle v = new Vehicle( "John", 4 ); MotorizedVehicle mv1 = new MotorizedVehicle( "Mike", 4, 3.2 ); MotorizedVehicle mv2 = new MotorizedVehicle( "Sarah", 4, 4.0 ); System.out.println( mv1 + " has " + mv1.horsePower( ) + " horsepower " ); mv2.setOwner( mv1.getOwner( ) ); if ( mv1.equals( mv2 ) ) System.out.println( "mv1 and mv2 are equal" ); else System.out.println( "mv1 and mv2 are not equal" ); mv2.setVolumeDisplacement( mv1.getVolumeDisplacement( ) ); if ( mv1.equals( mv2 ) ) System.out.println( "mv1 and mv2 are now equal" ); else System.out.println( "mv1 and mv2 are still not equal" ); Bicycle b2 = new Bicycle( "Jane", 2 ); System.out.println( "\nb2 is " + b2 ); } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/24 16:16