Importando duas classes como fazer:

Gente eu crie um classe RegistroJava e outra Calculadora e a classe principal Main.
na principal eu gostaria que a pessoa escolhe entre uma das duas porem nao consigo importa esta dando erro, alguem pode me dar um Help? segue o codigo abaixo;

Classe principal (main):
package com.company;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

    int opcao = 0;
    Scanner sc = new Scanner(System.in);
    RegistroJava registro = new RegistroJava();
    Calculadora calc = new Calculadora();



    System.out.println("Seja Bem Vindo");
    System.out.println("Escolha qual programa usar"  );
    System.out.println("opcao (1) RegistroJava ou opcao (2) Calculadora"  );
    opcao = Integer.parseInt(sc.nextLine());
    if(opcao == 1){
        System.out.println(registro);
    }
    if(opcao == 2) {
        System.out.println(calc);
    }else {
        System.out.println("operacao invalida :-(");
    }


}

}

Classe Registrojava

package com.company;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.Scanner;

public class RegistroJava {

public static class Main {

    public static void main(String[] args) throws ParseException {
        Scanner entrada = new Scanner(System.in);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
        Scanner ler = new Scanner(System.in);

        /*Variavel*/
        double Taxa;
        char resp = 0;

        do {

            try {
                /*Data*/
                System.out.println("Entre com data");
                Date date = simpleDateFormat.parse(entrada.next());


                /*hora entrada*/
                Scanner entrada1 = new Scanner(System.in);
                System.out.println("Entre com a hora de Inicio");
                DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm");
                LocalTime horaInicio = LocalTime.parse(entrada1.nextLine(), dtf);

                /*hora saida*/
                Scanner saida = new Scanner(System.in);
                System.out.println("Entre com a hora  Final");
                dtf = DateTimeFormatter.ofPattern("HH:mm");
                LocalTime horaFinal = LocalTime.parse(saida.nextLine(), dtf);

                /*taxa do horario*/
                Scanner entradaDados = new Scanner(System.in);
                System.out.println("Digite o valor da taxa do horario R$: ");
                Taxa = entradaDados.nextDouble();

                /*Formula da diferença das horas*/
                long time = ChronoUnit.MINUTES.between(horaInicio, horaFinal);

                /*calculo de minutos total convertidos para horas e minutos*/
                long horas = time / 60;
                long minutos = time % 60;
                double valorPago = (time * Taxa) / 60;


                /*impressao na tela dos resultados */
                System.out.println("A data de Entrada: " + simpleDateFormat.format(date));
                System.out.println("A hora de Entrada: " + horaInicio);
                System.out.println("A hora de Saida: " + horaFinal);

                /*calculo final para me retorna os minutos total trabalhados em  horas e minutos*/
                String tempoFinal = String.format("A quantidade de horas trabalhadas e: %02d :%02d ", horas, minutos);

                /*resultado da diferença das horas trabalhadas*/
                System.out.println(tempoFinal);
                System.out.printf("Valor a ser pago pelas horas Trabalhadas: R$ %.2f", valorPago);
                System.out.println();
                System.out.println("Deseja continuar (S/N)?");
                resp = ler.next().toLowerCase().charAt(0);

            } catch (ParseException e) {
                e.printStackTrace();

                ler.close();
            }

        } while (resp != 'n');
        {
            System.out.println("Obrigado por usar o Registro de Horas de Trabalho em Java!");
        }
    }

}

}

e a classe calculadora

package com.company;
import java.util.Locale;
import java.util.Scanner;

public class Calculadora {

public static class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //Variaveis
        double valorUm;
        double valorDois;
        String operacao;
        boolean continuar;


        do{
            System.out.println("Digite o valor um: ");
            valorUm = sc.nextDouble();

            System.out.println("Digite a Operacao(+, -, *, /): ");
            operacao = sc.next();

            System.out.println("Digite o valor um: ");
            valorDois = sc.nextDouble();

            System.out.println("Resultado:" + realizarCalculo(valorUm, valorDois, operacao));
            continuar = verificarNovaOperacao();
        }while(continuar);
        System.out.print("Obrigada po usar calculadora java");

    }

    public static  boolean verificarNovaOperacao(){
        Scanner sc = new Scanner(System.in);
        System.out.println("Deseja realizar nova operacao ? (S ou N): " );
        return !sc.nextLine().toUpperCase(Locale.ROOT).equals("N");
    }

    public static Double realizarCalculo(Double valorUm, Double valorDois, String operacao) {
        Double respostaCalculo = 0.0;

        if ("+".equals(operacao)) {
            respostaCalculo = valorUm + valorDois;
        } else if ("-".equals(operacao)) {
            respostaCalculo = valorUm - valorDois;
        } else if ("*".equals(operacao)) {
            respostaCalculo = valorUm * valorDois;
        } else if ("/".equals(operacao)) {
            respostaCalculo = valorUm / valorDois;
        } else {
            System.out.println("operacao invalida :-(");
        }

        return respostaCalculo;



    }
}

}

Em vez de cada classe ter seu próprio main, basta trocar para outro método, e no Main basta chamá-los. Além disso, não precisa ficar criando vários Scanner’s toda hora, já que todos estão lendo do System.in (ou seja, todos lêem da mesma stream de entrada), portanto basta criar um e passá-lo para os métodos.

Por exemplo:

import java.util.Scanner;

public class Calculadora {
    public static void executa(Scanner entrada) {
        boolean continuar;
        do {
            System.out.println("Digite o valor um: ");
            double valorUm = Double.parseDouble(entrada.nextLine());

            System.out.println("Digite a Operacao(+, -, *, /): ");
            String operacao = entrada.nextLine();

            System.out.println("Digite o valor um: ");
            double valorDois = Double.parseDouble(entrada.nextLine());

            System.out.println("Resultado:" + realizarCalculo(valorUm, valorDois, operacao));
            continuar = verificarNovaOperacao();
        } while (continuar);
        System.out.print("Obrigada po usar calculadora java");
    }
}
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class RegistroJava {
    public static void executa(Scanner entrada) {
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
        DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");

        while (true) {
            System.out.println("Entre com data");
            LocalDate date = LocalDate.parse(entrada.nextLine(), dateFormatter);
            System.out.println("Entre com a hora de Inicio");
            LocalTime horaInicio = LocalTime.parse(entrada.nextLine(), timeFormatter);
            System.out.println("Entre com a hora  Final");
            LocalTime horaFinal = LocalTime.parse(entrada.nextLine(), timeFormatter);
            System.out.println("Digite o valor da taxa do horario R$: ");
            double taxa = Double.parseDouble(entrada.nextLine());

            Duration duracao = Duration.between(horaInicio, horaFinal);
            double valorPago = (duracao.toMinutes() * taxa) / 60;
            System.out.println("A data de Entrada: " + dateFormatter.format(date));
            System.out.println("A hora de Entrada: " + horaInicio);
            System.out.println("A hora de Saida: " + horaFinal);
            System.out.printf("A quantidade de horas trabalhadas e: %02d :%02d\n", duracao.toHoursPart(), duracao.toMinutesPart());
            System.out.printf("Valor a ser pago pelas horas Trabalhadas: R$ %.2f\n", valorPago);

            System.out.println("Deseja continuar (S/N)?");
            if ("N".equalsIgnoreCase(entrada.nextLine())) {
                break;
            }
        }
        System.out.println("Obrigado por usar o Registro de Horas de Trabalho em Java!");
    }
}

Deixei os método estáticos porque não vejo motivo para criar instâncias. Também modifiquei um pouco o código, principalmente o segundo: se está usando o java.time, não tem motivo nenhum para misturar com SimpleDateFormat, use apenas a API nova. E repare como o mesmo Scanner é usado por todos.

Então no Main ficaria assim:

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.println("Seja Bem Vindo");
        System.out.println("Escolha qual programa usar");
        System.out.println("opcao (1) RegistroJava ou opcao (2) Calculadora");
        int opcao = Integer.parseInt(sc.nextLine());
        if (opcao == 1) {
            RegistroJava.executa(sc);
        } else if (opcao == 2) {
            Calculadora.executa(sc);
        } else {
            System.out.println("operacao invalida :-(");
        }
    }
}

Alternativa

Uma opção mais avançada (e tem que ver se faz sentido de acordo com os requisitos, caso contrário será só um exercício para aprender o mecanismo), é criar uma interface que possui o método executa, e aí vc cria a classe concreta de acordo com a opção escolhida.

Por exemplo, poderia ter essa interface:

import java.util.Scanner;

public interface Operacao {
    void executa(Scanner entrada);
}

E as classes que a implementam:

public class Calculadora implements Operacao {
    @Override
    public void executa(Scanner entrada) {
        boolean continuar;
        // etc...  código aqui é igual à versão anterior
    }
}

public class RegistroJava implements Operacao {
    @Override
    public void executa(Scanner entrada) {
        // etc... código aqui é igual à versão anterior
    }
}

E no Main basta instanciar a classe de acordo com a opção:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    System.out.println("Seja Bem Vindo");
    System.out.println("Escolha qual programa usar");
    System.out.println("opcao (1) RegistroJava ou opcao (2) Calculadora");
    int opcao = Integer.parseInt(sc.nextLine());
    Operacao operacao = null;
    if (opcao == 1) {
        operacao = new RegistroJava();
    } else if (opcao == 2) {
        operacao = new Calculadora();
    }

    if (operacao == null) {
        System.out.println("operacao invalida :-(");
    } else {
        operacao.executa(sc);
    }
}
1 curtida

Cara muito top meu amigo, realmente tambem essa questao do Scanner nao tinha prestado atencao, diminuindo os Scanner fica um codigo bem mais enxuto, muito obrigada, voce deu Show lhe agradeço de coração.