Error Type Cannot instantiate

Hola a tod@s estoy haciendo un programa que registra llamadas pero en la clase Actividad4 me aparece un error Cannot instantiate the type LlamadasLocales. Creo que estoy poniendo bien el nombre cuando inicio el objeto, acontinuación pongo el código fuente de todo lo que llevo echo haber si pueden echarme una mano porque no veo como puedo solucionarlo. Saludos y gracias

public class Centralita
{
        //Atributos
        private int numeroLlamadas;
        private double costeLlamadas;
       
        //Constructor
        public Centralita(int numeroLlamadas, double costeLlamadas)
        {
                this.numeroLlamadas= numeroLlamadas;
                this.costeLlamadas = costeLlamadas;
        }
        //Getters
        public int getNumeroLlamadas()
        {
                return numeroLlamadas;
        }
        public double getCosteLlamadas()
        {
                return costeLlamadas;
        }
        //Resto de metodos
        public void numeroTotalLlamada(int numeroLlamadas)
        {
                 this.numeroLlamadas = numeroLlamadas;
        }
        public void costeTotalLlamadas(double costeLlamadas)
        {
                this.costeLlamadas = costeLlamadas;
        }
        public void registrarLlamadas()
        {
                numeroLlamadas += 1;
                costeLlamadas += getCosteLlamadas();
        }
}
abstract class Llamada
{
        //Atributos
        private String numeroOrigen;
        private String numeroDestino;
        private double duracion;

        //Constructor
        public Llamada(String param1, String param2, double param3)
        {
                this.numeroOrigen = param1;
                this.numeroDestino = param2;
                this.duracion = param3;
        }
       
        //Getters
        public String getNumeroOrigen()
        {
                return numeroOrigen;
        }
        public String getNumeroDestino()
        {
                return numeroDestino;
        }
        public double getDuracion()
        {
                return duracion;
        }
        public String setNumeroOrigen()
        {
                return numeroOrigen;
        }
        public String setNumeroDestino()
        {
                return numeroDestino;
        }
        public double setDuracion()
        {
                return duracion;
        }
        //Resto de metodos
        public abstract void calcularPrecio(double param3);
}

abstract class LlamadasLocales extends Llamada
{
        //Atributos
        private double precio;
        //Constructores
        public LlamadasLocales(String param1, String param2, int param3)
        {
                super(param1, param2, param3);
                this.precio = 0.15;
        }
       
        //Getters
        public double getPrecio()
        {
                return precio;
        }
        //Resto de metodos
        public double calcularPrecio()
        {
                return getDuracion() * precio;
        }
        public void llamadaLocal()
        {
                System.out.println("Llamadas locales" + "\nNumero origen: " + getNumeroOrigen() + " Numero destino: " + getNumeroDestino()
                + " Duracion: " + getDuracion());
        }
}
abstract class LlamadasProvinciales extends Llamada
{
        //Atributos
        private double precio1;
        private double precio2;
        private double precio3;
        private int franja;
        //Constructores
        public LlamadasProvinciales(String param1, String param2, int param3, int param4)
        {
                super(param1, param2, param3);
                this.precio1 = 0.20;
                this.precio2 = 0.25;
                this.precio3 = 0.30;
                this.franja = 0;       
        }
        //Resto de metodos
        public void calcularPrecio(LlamadasProvinciales param1, LlamadasProvinciales param2, LlamadasProvinciales param3)
        {
                if (franja==1)
                {
                                System.out.println("El precio de la franja1 es: " + getDuracion() * precio1);
                } else
                        if (franja==2)
                                {
                                System.out.println("El precio de la franja2 es: " + getDuracion() * precio2);
                                }
                        else
                                System.out.println("El precio de la franja3 es: " + getDuracion() * precio3);
                }
        public void llamadaProvincial()
        {
                System.out.println("Llamadas provinciales: " + "\nNumero origen: " + getNumeroOrigen() + " Numero destino: " + getNumeroDestino() + " Duracion: " + getDuracion() + franja);
        }
}
public class Actividad4
{
        public static void main(String[] args)
        {
                Centralita centralita1 = new Centralita(1, 1);
                LlamadasLocales llamada1 = new LlamadasLocales("912345612", "9555612301", 67);
               
                //LlamadasLocales llamada2 = new LlamadasLocales("9555612301", "912345612", 23);
                //LlamadasProvinciales llamada3 = new LlamadasProvinciales("955555", "123444", 12, 2);
                //LlamadasProvinciales llamada4 = new LlamadasProvinciales("123444", "955555", 23, 1);
               
                centralita1.registrarLlamadas();
                //centralita1.registrarLlamadas(llamada2);
                //centralita1.registrarLlamadas(llamada3);
               
        }
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de neko069

Si tu clase base es Llamada (

Si tu clase base es Llamada ( la cual tienes marcada como abstract) entonces las clases que se derivan de ellas (heredan sus propiedades y métodos pues) no deberían ser abstractas, prueba eliminando de tus clases LlamadasLocales y LlamadasProvinciales la palabra reservada abstract y ya no deberías de tener el problema que mencionas.

Gracias era eso lo que

Gracias era eso lo que fallaba pero ahora me aparece otro error The method registrarLlamadas() in the type Centralita is not applicable for the arguments (LlamadasLocales). Porque motivo no es el del tipo Centralita?

Imagen de neko069

No sé

Mi habilidad de conectarme remotamente a tu máquina y ver tú código me está fallando (de hambre).
Digo, pega aquí cómo estás usando ésos objetos (entre tags de <code> y </code>) y ya podríamos ver dónde está el error.

Lo siento te pongo el código

Lo siento te pongo el código de las clases Llamada, LlamadasLocales, LlamadasProvinciales y Actividad4. El error me aparece en la clase Actividad4 gracias por responder.

abstract class Llamada
{
        //Atributos
        private String numeroOrigen;
        private String numeroDestino;
        private double duracion;

        //Constructor
        public Llamada(String param1, String param2, double param3)
        {
                this.numeroOrigen = param1;
                this.numeroDestino = param2;
                this.duracion = param3;
        }
       
        //Getters
        public String getNumeroOrigen()
        {
                return numeroOrigen;
        }
        public String getNumeroDestino()
        {
                return numeroDestino;
        }
        public double getDuracion()
        {
                return duracion;
        }
        public String setNumeroOrigen()
        {
                return numeroOrigen;
        }
        public String setNumeroDestino()
        {
                return numeroDestino;
        }
        public double setDuracion()
        {
                return duracion;
        }
        //Resto de metodos
        public abstract double calcularPrecio(double param3);
        {
               
        }
}

public class LlamadasLocales extends Llamada
{
        //Atributos
        private double precio;
        //Constructores
        public LlamadasLocales(String param1, String param2, int param3)
        {
                super(param1, param2, param3);
                this.precio = 0.15;
        }
       
        //Getters
        public double getPrecio()
        {
                return precio;
        }
        //Resto de metodos
        public double calcularPrecio(double param3)
        {
                return getDuracion() * precio;
        }
        public void llamadaLocal()
        {
                System.out.println("Llamadas locales" + "\nNumero origen: " + getNumeroOrigen() + " Numero destino: " + getNumeroDestino()
                + " Duracion: " + getDuracion());
        }
}
public class LlamadasProvinciales extends Llamada
{
        //Atributos
        private double precio1;
        private double precio2;
        private double precio3;
        private int franja;
        //Constructores
        public LlamadasProvinciales(String param1, String param2, int param3, int param4)
        {
                super(param1, param2, param3);
                this.precio1 = 0.20;
                this.precio2 = 0.25;
                this.precio3 = 0.30;
                this.franja = 0;       
        }
        //Resto de metodos
        public double calcularPrecio(LlamadasProvinciales param1, LlamadasProvinciales param2, LlamadasProvinciales param3)
        {
                if (franja==1)
                {
                                System.out.println("El precio de la franja1 es: " + getDuracion() * precio1);
                } else
                        if (franja==2)
                                {
                                System.out.println("El precio de la franja2 es: " + getDuracion() * precio2);
                                }
                        else
                                System.out.println("El precio de la franja3 es: " + getDuracion() * precio3);
                return franja;
                }
        public void llamadaProvincial()
        {
                System.out.println("Llamadas provinciales: " + "\nNumero origen: " + getNumeroOrigen() + " Numero destino: " + getNumeroDestino() + " Duracion: " + getDuracion() + franja);
        }
        public double calcularPrecio(double param3)
        {
                return 0;
        }
}
public class Actividad4
{
        public static void main(String[] args)
        {
                Centralita centralita1 = new Centralita();
                LlamadasLocales llamada1 = new LlamadasLocales("912345612", "9555612301", 67);
               
                LlamadasLocales llamada2 = new LlamadasLocales("9555612301", "912345612", 23);
                //LlamadasProvinciales llamada3 = new LlamadasProvinciales("955555", "123444", 12, 2);
                //LlamadasProvinciales llamada4 = new LlamadasProvinciales("123444", "955555", 23, 1);
               
                centralita1.registrarLlamadas(llamada1);
                centralita1.registrarLlamadas(llamada2);
                //centralita1.registrarLlamadas(llamada3);
               
        }
}
Imagen de neko069

Err ...

Mejor pega tu stack trace, las clases ya las habías puesto en tu post inicial.
Ahora que veo la firma de tú método registrarLlamadas en tu clase Centralita ... no recibe ningún parámetro, sin embargo, en tu clase Actividad4 le estás enviando parámetros de tipo LlamadasLocales ... puede ser por ahí el error, supongo.

Imagen de Sr. Negativo

A veces solo basta buscar un poco ...

Original

import java.io.*;
import java.util.Scanner;
/**
 *
 *@author Sr. Negativo 2011
 *
 */

public class Llamadas{
       
        //constantes
        public static final int Local=2;
    public static final int Celular=5;
    public static final int Larga=3;
   
   static int  tipoServicio(int t){
        if(t==1){
                System.out.println("[LLamada local]\n");
        }else if(t==2){
                System.out.println("[LLamada a celular]\n");
        }else {
                System.out.println("[LLamada de larga distancia]\n");
        }
        return t;
   }
   
   public static void main(String[] args)throws IOException,Exception{
   
   Scanner teclado=new Scanner(System.in);
   
   int tipo=0;double duracion=0,costo=0;
   
   
    while(true){
       
        //tipo
        do{
               
                System.out.println("\n\t[Tipo llamadas]\n");
                System.out.println("1. Local-->$2 por minuto");
                System.out.println("2. A celular-->$5 por minuto");
                System.out.println("3. Larga distancia-->$3 por minuto");
                System.out.println("4. Salir");
                System.out.println("\nOpcion: ");
                tipo=teclado.nextInt();
        }while(tipo<=0||tipo>4);
       
        if(tipo==4){
                System.exit(0);
        }else{
       
        tipoServicio(tipo);//muestra el tipo de servicio
       
        //duración
        do{
                System.out.println("Duracion (minutos): ");
             duracion=teclado.nextDouble();
        }while(duracion<=0);
       
          switch(tipo){
                case 1:costo=duracion*Local;break;
                case 2:costo=duracion*Celular;break;
            case 3:costo=duracion*Larga;break;
            default:System.out.println("\nOpcion incorrecta ");break;
        }
       
        System.out.println("Costo total llamada: [$"+costo+"]");
               
        }//fin else
       
       
    }//fin while
   
 
   }//fin main
   
   
}//fin Llamadas

Servido joven

El stack trace me pone The

El stack trace me pone The method registrarLlamadas() in the type Centralita is not applicable for the arguments (LlamadasLocales). E solucionado el error pero cuando ejecuto el programa no muestra nada por la pantalla. @Sr negativo no quiero que me hagan el trabajo por que se que de esa manera no voy a prender, solo quiero que me echen una mano para saber porque falla. Saludos