当前位置: 首页 > 知识库问答 >
问题:

Java继承-从父类获取参数

陶锋
2023-03-14

我正在尝试从Car的父类中获取一个参数并将其添加到我的数组(CARSPARKED),我如何做到这一点呢?

父类

public class Car
{
    protected String regNo;       //Car registration number
    protected String owner;       //Name of the owner
    protected String carColor;

    /** Creates a Car object
     * @param rNo - registration number
     * @param own - name of the owner
     **/
    public Car (String rNo, String own, String carColour)
    {
        regNo = rNo;
        owner = own;
        carColor = carColour;
    }

    /** @return The car registration number
     **/
    public String getRegNo()
    {
        return regNo;
    }

    /** @return A String representation of the car details
     **/
    public String getAsString()
    {
        return "Car: " + regNo  + "\nColor: " + carColor;

    }
    public String getColor()
    {
        return carColor;
    }
}

子类

public class Carpark extends Car
{
    private String location;        // Location of the Car Park  
    private int capacity;           // Capacity of the Car Park - how many cars it can hold 
    private int carsIn;             // Number of cars currently in the Car Park   
    private String[] carsParked;

    /** Constructor for Carparks
     * @param loc - the Location of the Carpark
     * @param cap - the Capacity of the Carpark
     */
    public Carpark (String locations, int room)
    {

        location = locations;
        capacity = room;
    }
    /** Records entry of a car into the car park */
    public void driveIn()
    {
         carsIn = carsIn + 1;



    }

    /** Records the departure of a car from the car park */
    public void driveOut()
    {
        carsIn = carsIn - 1;
    }

    /** Returns a String representation of information about the carpark */
    public String getAsString()
    {
        return location + "\nCapacity: " + capacity +
             "  Currently parked:  " + carsIn + 
             "\n*************************\n";
    }

}

最后一个问题法

公共字符串getCarsByColor(字符串CarColor)

{

  for (int num = 0; num < carsParked.length; num++)
    {
        if ( carColour.equals(carsParked[num]) )
        {
            System.out.print (carsParked[num]);
        }
    }
return carColour;

}

到目前为止,我已经有了这个,所以如果在参数中加入“red”,它将列出所有红色的汽车和相应的信息,但似乎不起作用~_~。

共有2个答案

刘安志
2023-03-14

你好像搞错了关系:停车场不是汽车。我建议不要在这两个类之间使用任何一个方向的继承。而carpark可能只有一个数组或汽车集合。

还要注意,参数carsin并不是必需的--只需获取cars数组的lengty(如果是集合)(或者size())。

编辑:好的,忽略继承部分,在调用drivein时添加cars,在调用driveout时删除cars似乎是有意义的。

drivein可能应该将car作为参数,这样该方法就可以访问您想要存储的参数(就我个人而言,我只会存储car引用,但没有问题)。由于我们将添加和删除这些参数,因此使用能够调整自身大小的list而不是像arraylist这样的数组将会容易得多。例如:

private final List<String> carsRegNosParked = new ArrayList<String>();

public void driveIn(Car car) {
    carsRegNosParked.add(car.getRegNo());
}

driveout应该做什么还不太清楚。可能需要一个特定的注册号才能删除:

public void driveOut(String regNo) {
    carsRegNosParked.remove(regNo);
}

或者它可以不分青红皂白地移走一辆车,比如第一辆车补充道:

public void driveOut() {
    if (!carsRegNosParked.isEmpty()) {
        carsRegNosParked.remove(0);
    }
}

请注意remove(Object)remove(int)之间的区别。

终逸仙
2023-03-14

首先将carsparked更改为列表。所以:

private String[] carsParked;

变成

private List<String> carsParked;

然后在构造函数中通过执行以下操作将其初始化为空列表:carsParked=new ArrayList();

然后在drive in方法中,使它接受一个car参数,并拉出所需的参数:

public void driveIn(Car car) {
   carsParked.add(car.getRegNo());
}

同样,你也不需要通过这种方式来跟踪汽车的数量。因为您总是可以通过carsparked.size()来找到答案。

null

编辑:当然可以用一个简单的数组来完成。这其中的问题是规模。假设您最初创建了一个大小为5的数组,当您去添加6项时,您将需要创建一个新的更大的数组,复制原始数据,然后添加新项。只是更多的工作。现在,如果你有一个停车场,它可以有X个点,那么你从一开始就将数组初始化为这个大小。

public Carpark (String locations, int room){
    location = locations;
    capacity = room;
    //this creates an array with the max number of spots
    carsParked = new String[capacity];
    //also good idea to init 
    carsIn = 0; //initial number of cars parked
}

则在drivein()方法中:

public void driveIn(Car car) {
   carsParked[carsIn] =car.getRegNo();
   carsIn=carsIn+1;
}

现在driveout()

public void driveOut(Car car) {
   //loop through the array until we find the car
   for (int i=0; i < carsParked.length; i=i+1){
     if (car.getRegNo().equals(carsParked[i])){
        //we found the car, so set the space null
        carsParked[i] = null;
        carsIn=carsIn-1;
        //stop looping now
        break;
     }
   }
}

看起来不错吧。不,它不是。现在drivein将不起作用,因为我们的空点遍布各地。我们如何修复它:

public void driveIn(Car car) {
   //loop through the array until we find a null spot, 
   //then park the car
   for (int i=0; i < carsParked.length; i=i+1){
     if (carsParked[i] == null){
        //we found the car, so set the space null
        carsParked[i] = car.getRegNo();
        carsIn=carsIn+1;
        //stop looping now
        break;
     }
   }
}

还可以进一步改进。我可能仍然会将string[]carsparked更改为car[]carsparked以避免丢弃信息。我还将driveindriveout方法更改为返回布尔值,以指示是否已成功停车或未停车。

最后编辑:好的,如果你想要跟踪什么车停在停车场,他们在哪个位置,你需要对每一辆车有足够的了解,使它独特。在您的情况下,您可能只需要regno。因此,当您调用driveindriveout时,您必须传递该信息,以便将其存储在数组中的适当索引(停车点)。否则你只会知道一辆车停在某个地方,或者一辆车离开了。而不是开放的位置。

因此简而言之,这两种方法中的参数car car包含唯一标识正在停放或离开的每辆汽车所需的信息。没有它,car park实例将不知道当前谁在停车,或者他们在哪里停车。

 类似资料:
  • 问题内容: 我该如何继承其父代的样式和javascript。 我努力了 但是,它会删除标签。此外,我看不到影响iframe的样式。 我是否有更好/其他的方法来解决这个问题?谢谢。 问题答案: 您可以通过在iframe中使用以下代码来“继承”父级的CSS: 在IE,Chrome和Firefox中对我来说效果很好。 关于JavaScript,我找不到直接将父JavaScript添加到iframe中的方

  • 问题内容: 我有及其继承的类。如何从课程中获取属性? 举例来说,让这些和对象: 我想做一些事情,例如: 并得到。我怎样才能做到这一点? 问题答案: 你不能。 实例仅继承父类的方法和属性,而不继承 实例 属性。您不应混淆两者。 是 实例的实例 属性。本实例将有他们 自己 的副本属性。 通常,您将对构造函数进行编码以采用两个参数: 另一种方法是保留对实例的引用: 从那里不再继承。像这样使用它:

  • 我试图理解从根pom文件到中级pom文件的继承指令。说明书上写着: 定义父pom文件继承和groupid、artifactid(但不是版本),从中间级父级到根pom文件。

  • 我试图弄清楚Java中的继承和数组,并试图让这些类一起工作。我相信我已经继承下来了,但我仍在为数组部分而挣扎。 有三个文件: 1. Person.java-基类2. Student.java-派生的Person.java3. Family.java-不太确定,我认为这是它自己的基类 人java有两个实例变量,String name和int age,以及各种各样的构造函数toString、equal

  • 继承一个可以实现的普通超类有什么不同吗? atm我有一个名为的抽象类,我有/扩展这个。 abstractcar中的一个字段设置为"私有int容量" 但是在子类“小型汽车”中,当我输入“容量”作为构造函数中使用的变量时,它说“容量在抽象汽车中有私有访问” 我想: > 子类继承超类的所有字段和方法? 我现在该怎么进行?

  • null 但是当我在一个项目中看到有效的POM时,我发现它还继承了、(这是一个问题,这应该是包含它的POM的描述,而不是它的子级。所有子级都有一个类似“所有POM的根”的描述有什么意义) 那么,是否存在一个实际的列表,或者它只是从父POM继承所有内容?我在工件的清单中使用了其中的一些属性,因此我想添加有意义的值