Hola.
Ya que no muestras como has hecho las clases del primer párrafo, te muestro como las haría yo. Todos modos tengo que escribirlas porque si no, no puedo avanzar con los siguientes párrafos.
Primero la clase Visita, con todos sus atributos y métodos.
La declaro como abstracta porque se entiende que no queremos construir objetos new Visita(), solo construiremos objetos de las clases hijas Excursiones y Tours.
No es obligatorio declararla abstracta, pero es una forma de impedir la creación de objetos Visita y además evidenciamos que es una clase destinada a ser "madre" de otras.
import java.util.Arrays;
public abstract class Visita {
private String nombre;
private String[] ciudades;
private String pais;
private double precioPersona;
private String extras;
private String idioma;
private int personasApuntadas;
private boolean accesible;
public Visita(String nombre, String[] ciudades, String pais, double precioPersona, String extras, String idioma,
int personasApuntadas, boolean accesible) {
this.nombre = nombre;
this.ciudades = ciudades;
this.pais = pais;
this.precioPersona = precioPersona;
this.extras = extras;
this.idioma = idioma;
this.personasApuntadas = personasApuntadas;
this.accesible = accesible;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String[] getCiudades() {
return ciudades;
}
public void setCiudades(String[] ciudades) {
this.ciudades = ciudades;
}
public String getPais() {
return pais;
}
public void setPais(String pais) {
this.pais = pais;
}
public double getPrecioPersona() {
return precioPersona;
}
public void setPrecioPersona(double precioPersona) {
this.precioPersona = precioPersona;
}
public String getExtras() {
return extras;
}
public void setExtras(String extras) {
this.extras = extras;
}
public String getIdioma() {
return idioma;
}
public void setIdioma(String idioma) {
this.idioma = idioma;
}
public int getPersonasApuntadas() {
return personasApuntadas;
}
public void setPersonasApuntadas(int personasApuntadas) {
this.personasApuntadas = personasApuntadas;
}
public boolean esAccesible() {
return accesible;
}
public void setAccesible(boolean accesible) {
this.accesible = accesible;
}
@Override
public String toString() {
return String.format(
"[nombre=%s, ciudades=%s, pais=%s, precioPersona=%.2f, extras=%s, idioma=%s, personasApuntadas=%d, accesible=%s",
nombre, Arrays.toString(ciudades), pais, precioPersona, extras, idioma, personasApuntadas, accesible?"SI":"No");
}
}
Aquí la clase hija Excursion. Su método toString() se complementa con lo que retorna el de su clase madre.
public class Excursion extends Visita {
private String fechaSalida;
private String horaSalida;
private int horasDura;
private boolean conAlmuerzo;
public Excursion(String nombre, String[] ciudades, String pais, double precioPersona, String extras,
String idioma, int personasApuntadas, boolean accesible, String fechaSalida, String horaSalida,
int horasDura, boolean conAlmuerzo) {
super(nombre, ciudades, pais, precioPersona, extras, idioma, personasApuntadas, accesible);
this.fechaSalida = fechaSalida;
this.horaSalida = horaSalida;
this.horasDura = horasDura;
this.conAlmuerzo = conAlmuerzo;
}
public String getFechaSalida() {
return fechaSalida;
}
public void setFechaSalida(String fechaSalida) {
this.fechaSalida = fechaSalida;
}
public String getHoraSalida() {
return horaSalida;
}
public void setHoraSalida(String horaSalida) {
this.horaSalida = horaSalida;
}
public int getHorasDura() {
return horasDura;
}
public void setHorasDura(int horasDura) {
this.horasDura = horasDura;
}
public boolean esConAlmuerzo() {
return conAlmuerzo;
}
public void setConAlmuerzo(boolean conAlmuerzo) {
this.conAlmuerzo = conAlmuerzo;
}
@Override
public String toString() {
return String.format("Excursion %s, fechaSalida=%s, horaSalida=%s, horasDura=%s, conAlmuerzo=%s]",
super.toString(), fechaSalida, horaSalida, horasDura, conAlmuerzo);
}
}
Y clase Tour
import java.util.Arrays;
public class Tour extends Visita {
private String fechaSalida;
private String horaSalida;
private String fechaLlegada;
private String horaLlegada;
private String[] hoteles;
public Tour(String nombre, String[] ciudades, String pais, double precioPersona, String extras, String idioma,
int personasApuntadas, boolean accesible, String fechaSalida, String horaSalida,
String fechaLlegada, String horaLlegada, String[] hoteles) {
super(nombre, ciudades, pais, precioPersona, extras, idioma, personasApuntadas, accesible);
this.fechaSalida = fechaSalida;
this.horaSalida = horaSalida;
this.fechaLlegada = fechaLlegada;
this.horaLlegada = horaLlegada;
this.hoteles = hoteles;
}
public String getFechaSalida() {
return fechaSalida;
}
public void setFechaSalida(String fechaSalida) {
this.fechaSalida = fechaSalida;
}
public String getHoraSalida() {
return horaSalida;
}
public void setHoraSalida(String horaSalida) {
this.horaSalida = horaSalida;
}
public String getFechaLlegada() {
return fechaLlegada;
}
public void setFechaLlegada(String fechaLlegada) {
this.fechaLlegada = fechaLlegada;
}
public String getHoraLlegada() {
return horaLlegada;
}
public void setHoraLlegada(String horaLlegada) {
this.horaLlegada = horaLlegada;
}
public String[] getHoteles() {
return hoteles;
}
public void setHoteles(String[] hoteles) {
this.hoteles = hoteles;
}
@Override
public String toString() {
return String.format("Tour %s, fechaSalida=%s, horaSalida=%s, fechaLlegada=%s, horaLlegada=%s, hoteles=%s]",
super.toString(), fechaSalida, horaSalida, fechaLlegada, horaLlegada, Arrays.toString(hoteles));
}
}
Luego sigo con el siguiente párrafo.