After a quick glance at a BlueJ tutorial I think this not the intended way. Instead consider initializing the list field:
private List<String> bikeColours = new ArrayList<>();
And adding methods for addition and retrieval:
public void addColour(String colour) {
bikeColours.add(colour);
}
public List<String> getColours() {
return new ArrayList<>(bikeColours);
}
Another way to expose a collection I sometimes use is with a Stream, which is read-only by nature:
public Stream<String> getColours() {
return bikeColours.stream();
}
This might not be useful in the context of BlueJ.
Note that fields/variables are usually declared as List, whilst they may be initialized as ArrayList. The List interface hides the fact that an ArrayList implementation is used, and allows switching to a different implementation later on.
If you do need a constructor with a collection parameter it's a good idea to make a copy of it, to avoid manipulations on the provided collection making unexpected changes to the internal data of this instance:
public Bike(String number, List<String> colours) {
this.number = number;
this.colours = new ArrayList(colours);
}
Regarding the naming. I would not name the fields 'bikeNumber' and 'bikeColour' since they are already members of the 'Bike' class. 'number' and 'colour' should suffice. Name clashes between parameters and fields can be averted by referencing the fields using 'this.' as shown above.
Since multiple colours are stored, I would name the field in the plural 'colours' rather than the singular 'colour'.