gpt4 book ai didi

Java继承(if中的局部变量/boolean 值)

转载 作者:行者123 更新时间:2023-12-01 06:09:42 24 4
gpt4 key购买 nike

我正在研究继承(Java),我写了以下代码。第一部分是 CarBase,然后我创建了一个子类 1,名为 Bus

我的想法是,首先判断它是否是总线,这样做时,我需要一个 boolean 值[if(isBus)],但是当我在Eclipse中编写这段代码时,有是一条错误消息,表示“isBus 无法解析为变量”。有人可以告诉我如何解决这个问题吗?我需要先声明 boolean 变量吗?

另一个问题是关于局部变量的声明。在 getOnBus(0 方法中,我有一个名为 temp 的局部变量,我被告知每当在方法内部使用局部变量时,我需要先声明它,然后再声明它我应该可以使用它,但是我看到有人直接使用它,如下所示,我在想这两者有什么区别?

public class Bus extends CarBase {
//Unique bus properties

public int max_Passenger = 35;
public int current_Passenger = 0;

// unique bus method
public boolean getOnBus(int p_amount) {
if(isBus) {
int temp = 0; // <===
temp = current_Passenger + p_amount; // <===

if( temp > max_Passenger) {
return false;
} else {
current_Passenger = temp;
return true;
}
}
return false;
}
}

或者如果我在不声明的情况下使用它是否有区别?

    public class Bus extends CarBase {
//Unique bus properties

public int max_Passenger = 35;
public int current_Passenger = 0;

// unique bus method
public boolean getOnBus (int p_amount) {
if(isBus) {
int temp=current_Passenger+p_amount; // <====

if( temp > max_Passenger) {
return false;
} else {
current_Passenger = temp;
return true;
}

}
return false;
}
}

代码如下

第一部分 CarBase(父级)

public class CarBase {
public int speed;
public String name;
public String color;
public int maxSpeed = 90;

// Method
public void speedUp(int p_speed) {
int tempSpeed = 0;
if (p_speed > 0) {
tempSpeed = speed + p_speed;
}
if (tempSpeed <= maxSpeed) {
speed =tempSpeed;
}
}
}

第二部分总线(Child1)

public class Bus extends CarBase {
//Unique bus properties

public int max_Passenger = 35;
public int current_Passenger = 0;

// unique bus method
public boolean getOnBus (int p_amount) {
if (isBus) {
int temp = 0;
temp = current_Passenger + p_amount;

if (temp > max_Passenger) {
return false;
} else {
current_Passenger = temp;
return true;
}
}
return false;
}
}

最佳答案

使用继承的要点是抽象一个对象是汽车还是公共(public)汽车,并编写无论传递什么都有效的代码。为此,您可以使用抽象方法。考虑一下

abstract class Vehicle {
private int occupied;

public Vehicle() {
occupied = 0;
}

public abstract int getCapacity(); // number of passengers

public boolean board(int howmany) {
if (occupied+howmany <= capacity) {
occupied += howmany;
return true;
}
else
return false;
}

public void unboard(int howmany) {
occupied -= howmany;
}
};

class Car extends Vehicle {
public Car () { super(); } // just call the Vehicle() constructor
public int getCapacity() { return 5; }
}


class Bus extends Vehicle {
public Bus() { super(); } // just call the Vehicle() constructor
public int getCapacity() { return 32; }
}

您将编写每个函数来接受车辆并处理它,而无需知道它是公共(public)汽车还是汽车。 (以下是一个愚蠢的函数,只是给你一个例子)

void board_on_first_avaible(Vehicle[] x, int n) {
for (int i=0; i<x.length; x++)
if (x.board(n))
return true; // board ok

return false; // couldn't board on anything
}

请注意,您应该设计代码,以便在车辆中为汽车和公共(public)汽车声明函数是抽象的。因此 getOnBus() 是一个坏主意

关于Java继承(if中的局部变量/boolean 值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37268362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com