子类编辑声明抽象类类成员
Subclass editing declared abstract classes classmember
我有一个抽象 class 子 class 将继承。我想要一个 get
方法来 return 乘客数量。我在摘要 class 中声明了这个方法,它将 return 乘客。
class成员passengers
没有定义而是实例化,所以get
方法知道return.
什么变量
在子classes中,我希望这个变量有不同的值。
但是,get方法returns 0
即使乘客数量不为0。
我试过写:passengers = random.nextInt(4) + 1;
摘要class车辆
import java.util.Random;
public abstract class Vehicle {
protected Random random = new Random();
protected int passengers;
public int getPassengerAmount() {
return this.passengers;
}
}
Class汽车
public class Car extends Vehicle {
private String name = "Car";
private int size = 1;
public int passengers = random.nextInt(4) + 1;
}
您通过在 Car
class 中重新声明 passengers
变量来屏蔽父变量。
您应该改为在子项的构造函数中初始化父变量:
public class Car extends Vehicle {
private String name = "Car";
private int size = 1;
public Car() {
this.passengers = random.nextInt(4) + 1;
}
}
如果你想让它成为public,那么你应该在Vehicle
class中把它变成public,但老实说我不推荐它我宁愿使用受保护的变量,但 public getters / setters.
您没有使用好的方法来计算特定车辆中有多少乘客。
很高兴将您的 Vehicle
作为一个抽象 class,因为它只有所有 Vehicle
共享的共同特征,并让每个特征在各自的实现中实现classes.
为Car
。您必须实施 Car
中应该有多少乘客的具体概念。因此,getPassengerAmount()
应在您的 Vehicle
中声明 abstract
并在每个特定车辆中实施。
这意味着:
import java.util.Random;
public abstract class Vehicle {
protected Random random = new Random();
protected int passengers;
public Vehicle() {
initializeVehiculeOptions();
}
public abstract int initializeVehiculeOptions();
}
和
import java.util.Random;
public class Car extends Vehicle {
private String name = "Car";
private int size = 1;
public Car() {
super();
}
@Override
public int initializeVehiculeOptions() {
// Here you initialize for
this.passengers = random.nextInt(4) + 1;
}
}
您将使用一个 Car
实例
Car ford = new Car();
您的问题的答案是您正在直接初始化 passengers 变量。你必须为它创建一个构造函数并在那里分配一个默认值。另外,您无需在 subclass 中再次创建 public 变量,否则抽象 class 就没有存在意义。
注意,一个抽象class必须有一个抽象函数。
public class Car extends Vehicle {
private String name = "Car";
private int size = 1;
public int passengers = random.nextInt(4) + 1; // this is not passengers of the superclass
void setPassengers() { passengers = random.nextInt(4) + 1; } // this is passengers of the superclass
}
我有一个抽象 class 子 class 将继承。我想要一个 get
方法来 return 乘客数量。我在摘要 class 中声明了这个方法,它将 return 乘客。
class成员passengers
没有定义而是实例化,所以get
方法知道return.
在子classes中,我希望这个变量有不同的值。
但是,get方法returns 0
即使乘客数量不为0。
我试过写:passengers = random.nextInt(4) + 1;
摘要class车辆
import java.util.Random;
public abstract class Vehicle {
protected Random random = new Random();
protected int passengers;
public int getPassengerAmount() {
return this.passengers;
}
}
Class汽车
public class Car extends Vehicle {
private String name = "Car";
private int size = 1;
public int passengers = random.nextInt(4) + 1;
}
您通过在 Car
class 中重新声明 passengers
变量来屏蔽父变量。
您应该改为在子项的构造函数中初始化父变量:
public class Car extends Vehicle {
private String name = "Car";
private int size = 1;
public Car() {
this.passengers = random.nextInt(4) + 1;
}
}
如果你想让它成为public,那么你应该在Vehicle
class中把它变成public,但老实说我不推荐它我宁愿使用受保护的变量,但 public getters / setters.
您没有使用好的方法来计算特定车辆中有多少乘客。
很高兴将您的 Vehicle
作为一个抽象 class,因为它只有所有 Vehicle
共享的共同特征,并让每个特征在各自的实现中实现classes.
为Car
。您必须实施 Car
中应该有多少乘客的具体概念。因此,getPassengerAmount()
应在您的 Vehicle
中声明 abstract
并在每个特定车辆中实施。
这意味着:
import java.util.Random;
public abstract class Vehicle {
protected Random random = new Random();
protected int passengers;
public Vehicle() {
initializeVehiculeOptions();
}
public abstract int initializeVehiculeOptions();
}
和
import java.util.Random;
public class Car extends Vehicle {
private String name = "Car";
private int size = 1;
public Car() {
super();
}
@Override
public int initializeVehiculeOptions() {
// Here you initialize for
this.passengers = random.nextInt(4) + 1;
}
}
您将使用一个 Car
实例
Car ford = new Car();
您的问题的答案是您正在直接初始化 passengers 变量。你必须为它创建一个构造函数并在那里分配一个默认值。另外,您无需在 subclass 中再次创建 public 变量,否则抽象 class 就没有存在意义。 注意,一个抽象class必须有一个抽象函数。
public class Car extends Vehicle {
private String name = "Car";
private int size = 1;
public int passengers = random.nextInt(4) + 1; // this is not passengers of the superclass
void setPassengers() { passengers = random.nextInt(4) + 1; } // this is passengers of the superclass
}