JF 7 3 Solution Esp
JF 7 3 Solution Esp
com
Método de clases Es un método que se puede utilizar sin crear primero una instancia de la clase. Se declara
al anteponer el modificador static a su definición.
Método estático
Clase interior Es cualquier clase implantada como una clase anidada dentro de otra clase. Por definición,
todas las clases internas son miembros de la clase de contenedor por composición.
Variable de clases Cualquier variable de nivel de clase Java que se declara con el modificador static. Esto
significa que solo puede existir una instancia de la variable de clase en la JVM,
Variable estática independientemente del número de instancias de clase.
Modificador estático Es una palabra clave que permite que una variable, un método o una clase interna esté
disponible sin crear primero una instancia de una variable.
Nested class Es una clase interna. Las clases internas están definidas dentro de una clase principal o de
contenedor y son miembros de la clase de contenedor por composición. De hecho, las
clases internas son la única forma en que puede crear instancias de clase mediante
composición.
Clase anidada estática Es una clase interna que está disponible para su uso sin crear primero una instancia de la
clase de contenedor. Se declara al anteponer el modificador static a su definición.
Método de clases Cualquier método de Java definido con un modificador static. Es accesible fuera de la clase
cuando se le antepone un especificador de acceso public, protected o default. Es privado e
Método estático inaccesible fuera de la clase cuando se le antepone un especificador private. Los métodos
de clase están disponibles sin crear primero una instancia de la clase.
Variable de clases Es una variable que puede estar disponible fuera de una clase sin crear primero una
instancia de una clase. Se declara al anteponer el modificador static al nombre de variable.
Variable estática
Inténtelo/resuélvalo:
1. Cree clases que se utilicen para comparar el uso de variables static y de instancia.
a. Cree un paquete nuevo denominado "vehicles".
b. Cree e implante la siguiente clase concreta:
i. Cree una clase denominada "Vehicle".
ii. Cree las variables static de la siguiente forma:
a. Una variable public static String denominada "MAKE" con un valor "Augur".
b. Una variable public static int denominada "numVehicles" con un valor inicial 0.
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
2
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
3
Vehicle manufactured
The vehicle is manufactured by: Augur
The model type is Vision
The chassis number is ch1
Vehicle manufactured
The vehicle is manufactured by: Augur
The model type is Edict
The chassis number is ch2
Number of vehicles manufactured: 2
Solución de ejemplo
package vehicle;
/**
*
* @author Oracle Academy
*/
public class Vehicle {
//Declare static variables that have a single value across all instances of a class
public final static String MAKE = "Augur";
public static int numVehicles = 0;
//Declare instance variables that have a single value for each object (instance)
private String chassisNo;
private String model;
@Override
public String toString(){
return "The vehicle is manufactured by: "+ Vehicle.MAKE
+ "\nThe model type is " + this.model
+ "\nThe chassis number is " + chassisNo;
}
}
package vehicle;
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
4
/**
*
* @author Oracle Academy
*/
public class TestVehicles {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.println("Manufacturer: " + Vehicle.MAKE);
System.out.println("Number of vehicles manufactured: " + Vehicle.numVehicles);
2. Para resaltar el hecho de que las variables estáticas se almacena en un único espacio de memoria al que accede
cada instancia de una clase, vamos a corregir el código creado en la pregunta 1.
a. En el método main, por encima de la línea que muestra el número total de coches fabricados, agregue la
siguiente línea de código:
• vehicle2.setMake("Seer");
Estamos utilizando vehicle2 para corregir el valor, pero podríamos utilizar cualquier nombre de instancia.
b. Agregue dos sentencias de salida bajo esta línea que utilicen el método toString para mostrar el valor de
vehicle1 y vehicle2.
Solución de ejemplo
public static void main(String[] args) {
System.out.println("Manufacturer: " + Vehicle.MAKE);
System.out.println("Number of vehicles manufactured: " + Vehicle.numVehicles);
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
5
vehicle2.setMake("Seer");
System.out.println(vehicle1);
System.out.println(vehicle2);
3. Con la solución creada en la pregunta 2, va a crear una clase estática anidada que contendrá los detalles del motor
utilizado en el vehículo.
a. Abra la clase vehicle.
b. Bajo el método constructor cree una clase public static denominada Engine.
c. Cree dos variables private static final denominadas MAKE y CAPACITY. Make contendrá texto, mientras que
capacity almacenará números enteros.
d. Los valores que debe asignar a las variables son "Predicter" y "1600"
e. No cree un constructor para esta clase.
f. Cree dos public static getters para ambas variables creadas.
g. Actualice el método toString de la clase Vehicle para mostrar la marca y modelo del motor. Recuerde que
Engine es una clase estática.
La salida del programa para cada vehículo se debe parecer ahora a la siguiente:
The vehicle is manufactured by: Seer
The model type is Edict
The chassis number is ch2
The engine make is Predicter
The engine capacity is 1600cc
Solución de ejemplo
public class Vehicle {
//Declare static variables that have a single value across all instances of a class
public static String MAKE = "Augur";
public static int numVehicles = 0;
//Declare instance variables that have a single value for each object (instance)
private String chassisNo;
private String model;
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
6
@Override
public String toString(){
return "The vehicle is manufactured by: "+ Vehicle.MAKE
+ "\nThe model type is " + this.model
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
7
4. Adaptará el código para utilizar una clase estática interior que pueda devolver información de la instancia de su
clase de contenedor.
a. Cambie la declaración Engine para que coincida con lo siguiente:
public static class Engine extends Vehicle {
b. Cree un constructor que acepte un parámetro String denominado model.
c. El constructor debe tener una única instrucción que envíe la variable model al superconstructor.
d. Vaya a su método main y cree un objeto Engine denominado vehicle3 por encima de la línea de código que
muestra el número total de coches fabricados. Para ello, tendrá que seguir estas directrices:
Outerclass.InnerClass object name = new Outerclass.InnerClass (parameter);
Vehicle.Engine vehicle3 = new Vehicle.Engine("Fortune");
e. Esto le da acceso a los métodos y los campos de la clase interna, así como a los métodos y los campos en su
clase delimitadora. Cree una sentencia de salida que utilice los métodos getter adecuados para mostrar lo
siguiente:
"Vehicle number ch3 is a Fortune model and has an engine capacity of 1600cc"
f. Para ver la diferencia entre los diferentes tipos de vehículos, intente crear la sentencia anterior con vehicle1 o
vehicle2 (no funciona ya que no tienen acceso a los trabajos internos de la clase estática Engine).
Solución de ejemplo
package vehicles;
/**
*
* @author Oracle Academy
*/
public class Vehicle {
//Declare static variables that have a single value across all instances of a class
public static String MAKE = "Augur";
public static int numVehicles = 0;
//Declare instance variables that have a single value for each object (instance)
private String chassisNo;
private String model;
public Vehicle(){
}
public Vehicle(String model){
numVehicles++;
chassisNo = "ch" + numVehicles;
this.model = model;
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
8
System.out.println("Vehicle manufactured");
}
@Override
public String toString(){
return "The vehicle is manufactured by: "+ Vehicle.MAKE
+ "\nThe model type is " + this.model
+ "\nThe chassis number is " + chassisNo
+ "\nThe engine make is " + Engine.getMAKE()
+ "\nThe engine capacity is " + Engine.getCapacity() + "cc";
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
9
}
}//end of class Vehicle
package vehicles;
/**
*
* @author Oracle Academy
*/
public class TestVehicle {
vehicle2.setMake("Seer");
System.out.println(vehicle1);
System.out.println(vehicle2);
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.