Para crear una instancia de una clase, se llama a su constructor mediante el operador new.
Un constructor es un tipo especial de método cuyo objetivo es inicializar una instancia recién creada.
Los constructores se parecen a los métodos normales, pero no tienen tipo de retorno y su nombre coincide con el de la clase.
class Library {
private int books;
public Library() {
// Initialize the books field
this.books = 10;
}
}
// This will call the constructor
var library = new Library();
Al igual que los métodos normales, los constructores pueden tener parámetros. Por lo general, los parámetros del constructor se guardan como campos (privados) para acceder a ellos más adelante, o bien se usan en algún cálculo que se hace una sola vez. Se pueden pasar argumentos a los constructores igual que se pasan argumentos a los métodos normales.
class Building {
private int numberOfStories;
private int totalHeight;
public Building(int numberOfStories, double storyHeight) {
this.numberOfStories = numberOfStories;
this.totalHeight = numberOfStories * storyHeight;
}
}
// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2);
En este ejercicio, vas a organizar carreras entre varios tipos de autos a control remoto. Cada auto tiene sus propias características de velocidad y de consumo de batería.
Los autos empiezan con la batería llena (100%). Cada vez que conduces el auto con el control remoto, este avanza la cantidad de metros de la velocidad del auto y reduce el porcentaje de batería restante en su consumo de batería.
Si la batería de un auto está por debajo de su porcentaje de consumo de batería, ya no puedes conducir el auto.
Cada pista de carreras tiene su propia distancia. Los autos se prueban verificando si pueden terminar la pista sin quedarse sin batería.
Tienes seis tareas, y cada una trabajará con instancias de autos a control remoto.
Permite crear un auto a control remoto definiendo un constructor para la clase NeedForSpeed que reciba como sus dos parámetros la velocidad del auto en metros y el porcentaje de consumo de batería (ambos de tipo int):
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
Permite crear una pista de carreras definiendo un constructor para la clase RaceTrack que reciba como único parámetro la distancia de la pista en metros (que es de tipo int):
int distance = 800;
var raceTrack = new RaceTrack(distance);
Implementa el método NeedForSpeed.drive() que actualiza el número de metros recorridos según la velocidad del auto. Además, implementa el método NeedForSpeed.distanceDriven() para devolver el número de metros recorridos por el auto:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();
car.distanceDriven();
// => 5
Actualiza el método NeedForSpeed.drive() para que consuma batería según el consumo de batería del auto. Además, implementa el método NeedForSpeed.batteryDrained() que indica si la batería está demasiado agotada como para conducir:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();
car.batteryDrained();
// => false
El auto a control remoto más vendido es el Nitro, que tiene una impresionante velocidad máxima de 50 metros con un consumo de batería del 4 %. Implementa el método (estático) NeedForSpeed.nitro() para devolver este tipo de auto:
var car = NeedForSpeed.nitro();
car.drive();
car.distanceDriven();
// => 50
Para terminar una carrera, un auto tiene que poder recorrer la distancia de la carrera. Esto significa no agotar su batería antes de haber cruzado la línea de meta. Implementa el método RaceTrack.canFinishRace() que recibe una instancia de NeedForSpeed como parámetro y devuelve true si el auto puede terminar la carrera; de lo contrario, devuelve false:
int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
int distance1 = 100;
var race1 = new RaceTrack(distance1);
int distance2 = 300;
var race2 = new RaceTrack(distance2);
race1.canFinishRace(car);
// => true
race2.canFinishRace(car);
// => false
Regístrate en Exercism para aprender y dominar Java con 26 conceptos158 ejercicios y mentoría humana real, todo gratis.