You are on page 1of 10

Defina una clase abstracta aviones, con dos métodos despegar y aterrizar.

package lab05;

public abstract class Aviones {

public abstract void despegar();

public abstract void aterrizar();

Defina una interface vuelos, con dos constantes, una para máxima velocidad 1500 y otra para
mínima velocidad 1000. Además, el método abstracto cinturones.

package lab05;

public interface Vuelos {

final int VMAX=1500;

final int VMIN=1000;

public void cinturones();

Defina una clase Boeing747 que sea hija de aviones e implemente la interfase vuelos. Que tenga
como atributos el peso y el estado del aeropuerto. Además, defina los métodos abstractos
heredados. Para poder despegar el peso debe ser menor a 180 y el aeropuerto debe estar libre.
Para poder aterrizar el aeropuerto debe estar libre y la velocidad menor a 1000. En caso de ser la
velocidad mayor a 1000 se debe indicar que los cinturones deben asegurarse.

import javax.swing.JOptionPane;

public class Boeing747 extends Aviones implements Vuelos{

public double peso;

public String estado;

public double velocidad;

public String getEstado(){

return estado;

}
public void setEstado(String estado){

this.estado=estado;

public double getPeso(){

return peso;

public void setPeso(double peso){

this.peso=peso;

public double getVelocidad(){

return velocidad;

public double setVelocidad(double velocidad){

this.velocidad=velocidad;

return 0;

@Override

public void cinturones() {

JOptionPane.showMessageDialog(null,"Abroche su cinturon");

@Override

public void despegar() {

if(this.peso<180&"libre".equals(this.estado)){

JOptionPane.showMessageDialog(null,"listo para despegar");

}else{
JOptionPane.showMessageDialog(null,"aun no puede despegar");

@Override

public void aterrizar() {

if(this.velocidad>Boeing747.VMAX){

this.cinturones();

if(this.velocidad<Boeing747.VMIN&"libre".equals(this.estado)){

JOptionPane.showMessageDialog(null,"listo para aterrizar");

}else{

JOptionPane.showMessageDialog(null,"aun no puede aterrizar");

Defina una clase Hércules que sea hija de aviones e implemente la interfase vuelos. Que tenga
como atributos el peso y el estado del aeropuerto. Además, defina los métodos abstractos
heredados. Para poder despegar el peso debe ser menor a 160 y el aeropuerto debe estar libre.
Para poder aterrizar el aeropuerto debe estar libre y la velocidad menor a 1500. En caso de ser la
velocidad mayor a 1500 se debe indicar que los cinturones deben asegurarse.

package lab05;

import javax.swing.JOptionPane;

public class Hercules extends Aviones implements Vuelos {

public double peso;

public String estado;

public double velocidad;


public String getEstado(){

return estado;

public void setEstado(String estado){

this.estado=estado;

public double getPeso(){

return peso;

public void setPeso(double peso){

this.peso=peso;

public double getVelocidad(){

return velocidad;

public double setVelocidad(double velocidad){

this.velocidad=velocidad;

return 0;

@Override

public void cinturones() {

JOptionPane.showMessageDialog(null,"Abroche su cinturon");

@Override
public void despegar() {

if(this.peso<160&"libre".equals(this.estado)){

JOptionPane.showMessageDialog(null,"listo para despegar");

}else{

JOptionPane.showMessageDialog(null,"aun no puede despegar");

@Override

public void aterrizar() {

if(this.velocidad>Hercules.VMAX){

this.cinturones();

if(this.velocidad<Hercules.VMIN&"libre".equals(this.estado)){

JOptionPane.showMessageDialog(null,"listo para aterrizar");

}else{

JOptionPane.showMessageDialog(null,"aun no puede aterrizar");

Para realizar las pruebas defina una clase principal en la que se cree dos aviones, uno Hércules y
otro Boeing; y se pida al usuario que ingrese el peso de cada avión y el estado del aeropuerto. El
usuario determinara si se encuentra volando o por despegar. Si el avión está volando se deberá
ingresar la velocidad. A partir de los datos ingresados hacer el análisis si puede o no despegar o
aterrizar y si se deben o no asegurar los cinturones.

import javax.swing.JOptionPane;

public class Lab05 {


public static void main(String[] args) {

double peso=0;

double velocidad=0;

String estado="",p="";

Boeing747 b=new Boeing747();

JOptionPane.showMessageDialog(null,"Boeing 747");

p=JOptionPane.showInputDialog("el avion esta en tierra o aire?");

if("tierra".equals(p)){

peso=Double.parseDouble(JOptionPane.showInputDialog("Ingrese el peso del avion"));

estado=JOptionPane.showInputDialog("ingrese el estado de la pista(libre u ocupado)");

b.setPeso(peso);

b.setEstado(estado);

b.setVelocidad(velocidad);

b.despegar();

}else{

velocidad=Double.parseDouble(JOptionPane.showInputDialog("ingrese la velocidad"));

estado=JOptionPane.showInputDialog("ingrese el estado de la pista(libre u ocupado)");

b.setVelocidad(velocidad);

b.setEstado(estado);

b.setPeso(peso);

b.aterrizar();

Hercules h=new Hercules();

JOptionPane.showMessageDialog(null,"Hercules");

p=JOptionPane.showInputDialog("el avion esta en tierra o aire?");


if("tierra".equals(p)){

peso=Double.parseDouble(JOptionPane.showInputDialog("Ingrese el peso del avion"));

estado=JOptionPane.showInputDialog("ingrese el estado de la pista(libre u ocupado)");

h.setPeso(peso);

h.setEstado(estado);

h.despegar();

}else{

velocidad=Double.parseDouble(JOptionPane.showInputDialog("ingrese la velocidad"));

estado=JOptionPane.showInputDialog("ingrese el estado de la pista(libre u ocupado)");

h.setEstado(estado);

h.setVelocidad(velocidad);

h.aterrizar();

NOTA:

La anotación @Override simplemente se utiliza, para forzar al compilador a comprobar en tiempo


de compilación que estás sobrescribiendo correctamente un método, y de este modo evitar errores
en tiempo de ejecución, los cuales serían mucho más difíciles de detectar.

Herencia:

a) En el encabezado se usa la palabra clave interface en lugar de class o abstract class. Por ejemplo
public interface NombreDelInterface {…}

b) Todo método es abstracto y público sin necesidad de declararlo, es decir, no hace falta poner
abstract public porque por defecto todos los métodos son abstract public. Por lo tanto un interface
en Java no implementa ninguno de los métodos que declara: ninguno de sus métodos tiene cuerpo.

c) Las interfaces no tienen ningún constructor.

d) Un interfaz solo admite campos de tipo “public static final”, es decir, campos de clase, públicos y
constantes. No hace falta incluir las palabras public static final porque todos los campos serán
tratados como si llevaran estas palabras. Recordemos que static equivalía a “de clase” y final a
“constante”. Las interfaces pueden ser un lugar interesante para declarar constantes que van a ser
usadas por diferentes clases en nuestros programas.

e) Una clase puede derivar de un interface de la misma manera en que puede derivar de otra clase.
No obstante, se dice que el interface se implementa (implements), no se extiende (extends) por sus
subclases. Por tanto para declarar la herencia de un interface se usa la palabra clave implements en
lugar de extends.

Una clase puede implementar uno o varios interfaces en Java (se indica con implements
NombreInterface1, NombreInterface2, …etc.), pero sólo puede extender una clase. Implementar
varios interfaces en una sola clase es lo más parecido que tiene Java a la herencia múltiple.

public interface Actor {…}: define la


interfaz actor ejemplo
aprenderaprogramar.com.

public abstract class Persona implements


Actor {…}: define la clase abstracta
Persona como implementación de la
interfaz Actor.

public class Profesor extends Persona{…}:


define la clase Profesor como extensión
de la clase Persona.

public class Estudiante extends


Persona{…}: define la clase Estudiante
como extensión de la clase Persona.

public interface ObjetoInerte {…}: define la interfaz ObjetoInerte.

public class Vehiculo implements Actor, ObjetoInerte {…}: define que la clase Vehiculo implementa
a dos interfaces, la interfaz Actor y la interfaz ObjetoInerte, es decir, que un vehículo es a la vez
Actor y ObjetoInerte.

public class Coche extends Vehiculo {…}: define la clase Coche como extensión de la clase Vehiculo.

public class Bicicleta extends Vehiculo {…}: define la clase Bicicleta como extensión de la clase
Vehiculo.

¿Cómo saber si una clase es candidata a ser definida como una interfaz?

a) Si necesitamos algún método con cuerpo ya sabemos que no va a ser una interfaz porque todos
los métodos de una interfaz han de ser abstractos.

b) Si necesitamos que una clase “herede” de más de una superclase, esas superclases son candidatas
a ser interfaces.
c) En algunos casos es igual de viable definir una clase como interfaz que como clase abstracta, pero
puestos en esta situación preferiremos optar por una interfaz porque es más flexible y extensible:
nos va a permitir que una clase implemente varias interfaces (aprovechamos la herencia múltiple
de las interfaces). En cambio, una clase no puede heredar de varias clases.

Ejemplo de comando try

PROGRAMA QUE DEVUELVE EL VOLUMEN DE UN CILINDRO HUECO MEDIANTE SUS VALORES:

RADIO MAYOR, RADIO MENOR, Y ALTURA

*/

package cilindrohueco;

import java.util.Scanner;

public class CilindroHueco {

public static void main(String[] args) {

//DECLARACION DE VARIABLES REALES

double radioMayor=0,radioMenor=0,altura=0,VolumenTotal=0;

Scanner num = new Scanner(System.in);

//Leemos el radio Mayor

try {

do{

System.out.print("Ingrese el radio del cilindro mayor: ");

radioMayor = Double.parseDouble(num.next()); //lee punto decimal

}while(radioMayor<=0);

} catch (Exception e) {

System.out.println("Error: " + e);

//Leemos el radio Menor

try {
do{

System.out.print("Ingrese el radio del cilindro menor: ");

radioMenor = Double.parseDouble(num.next()); //lee punto decimal

}while(radioMenor>=radioMayor || radioMenor<0); //valores positivos y menores a el radio


mayor

} catch (Exception e) {

System.out.println("Error: " + e);

//Leemos la altura

try {

do{

System.out.print("Ingrese la altura del cilindro: ");

altura = Double.parseDouble(num.next()); //lee punto decimal

}while(altura<=0); //valores positivos

} catch (Exception e)

System.out.println("Error: " + e);

//CREANDO LA INSTANCIA DE LA CLASE CILINDRO

Cilindro Cil1 = new Cilindro(radioMayor , altura);

Cilindro Cil2 = new Cilindro(radioMenor , altura);

VolumenTotal=(Cil1.getVolumen()-Cil2.getVolumen());

System.out.println("El volumen del cilindro hueco resultante es: " + VolumenTotal );