Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

iniciante

duvida em Programação Orientada a Objectos

Mensagens Recomendadas

iniciante

eu tendo uma classe chamada Pessoa não posso ter 2 subclasses desta classe? por exemplo:

tenho  public class Pessoa e fiz uma sub class desta class assim public class Funcionario extends Pessoa. e agora queria fazer outra sub class da class pessoa assim.public class Director extends Pessoa...mas não me deixa! o que eu quero fazer nao é possivel?


RC

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
felixs

Em Java, tal como na maioria das linguagens por objectos, não podes ter múltipla-herança. Das linguagens com que trabalhei, a única que permite isso é C++.

Para resolver o teu problema há várias patterns que são usadas (estou com perguiça para procurar), mas há-de ser algo com interfaces ou delegação.  B)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Herança múltipla é quando um filho tem dois pais, não quando um pai tem dois filhos, como parece ser o caso B)

Podes ter quantas sub-classes de uma classe quiseres, aliás, essa é a base da herança em POO, um classe ter as sub-classes que sejam necessárias.

O erro "mas não deixa" não é bem um erro de programação que se consiga resolver B), não deixa porquê, que erro te é mostrado pelo compilador/IDE?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
felixs

Oops... Li atravessado e percebi mal.  😳

O Knitter tem razão. Isso devia funcionar com qualquer linguagem de programação. É necessária mais informação para podermos ajudar-te.  :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
iniciante

tou a utilizar o netbeans

podem me dizer como é que faso uma coisa tao simples como um scan de um nome dentro de um case?

eu tenho isto :

case 1:

                   

System.out.println("Introduza um nome para o Funcionario:");
                         String nome = teclado.nextLine();
break;

e ele imprime o introduza um nome mas passa a frente e n para para eu inserir o nome -.-


RC

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
iniciante

eu agr ja alterei o programa todo e começei a fazer de outra maneira =/ mas se eu metexe  Director extends Funcionario ja deixava so que trocavame os dados todos


RC

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
iniciante

bem ja resolvi o meu problema de scan dentro do case...para o caso de alguma vez alguem precisar aqui fica a resposta!!

switch (opcao)
{
case 1:
System.out.println("\n Introduza um nome:");
teclado.nextLine(); // aqui limpa o buffer
String nome = teclado.nextLine();
opcao=0;
}

Boas Festas


RC

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Para que alguém te possa ajudar convinha que fosses mais explicito no que escreves e que desses mais informações.

Ainda não respondeste à minha pergunta inicial, afinal qual era a mensagem de erro que obtinhas, porque o que indicavas estar a fazer estava correcto. Depois "scan de um nome dentro de um case" não é algo que se possa entender sem se estar dentro do contexto. A própria frase peca em fornecer sentido.

Nem o código que colocaste ajuda já que a variável teclado aparece do nada, pode ser uma instância de uma infinidade de classes diferentes, por acaso, porque este tipo de perguntas é comum e o tipo de classes que se usam também, tenho até ideia da classe que estás a usar e dos problemas associados ao método, que estou a adivinhar qual é, nem isso nos informas.

Convenhamos, se informação a mais pode ser desnecessário, informação a menos é que não dá. Falando por mim, ainda não sou capaz de ler pensamentos de pessoas que estão a tentar transmitir ideias através de um fórum de discussão...

Pegando no último problema, ou na forma como o resolveste, limpar o buffer desse modo é um pouco martelar uma solução. Se o buffer tem dados, então ou são importantes e devias lê-los ou não são importantes e nem lá deviam estar. Uma vez que não dizes o que estás a usar, suponho que o problema tem origem numa leitura anterior, e que no buffer estar uma mudança de linha a mais. Se for esse o caso, na leitura anterior deverias remover a mudança de linha.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
iniciante

Para que alguém te possa ajudar convinha que fosses mais explicito no que escreves e que desses mais informações.

Ainda não respondeste à minha pergunta inicial, afinal qual era a mensagem de erro que obtinhas, porque o que indicavas estar a fazer estava correcto. Depois "scan de um nome dentro de um case" não é algo que se possa entender sem se estar dentro do contexto. A própria frase peca em fornecer sentido.

Nem o código que colocaste ajuda já que a variável teclado aparece do nada, pode ser uma instância de uma infinidade de classes diferentes, por acaso, porque este tipo de perguntas é comum e o tipo de classes que se usam também, tenho até ideia da classe que estás a usar e dos problemas associados ao método, que estou a adivinhar qual é, nem isso nos informas.

Convenhamos, se informação a mais pode ser desnecessário, informação a menos é que não dá. Falando por mim, ainda não sou capaz de ler pensamentos de pessoas que estão a tentar transmitir ideias através de um fórum de discussão...

Pegando no último problema, ou na forma como o resolveste, limpar o buffer desse modo é um pouco martelar uma solução. Se o buffer tem dados, então ou são importantes e devias lê-los ou não são importantes e nem lá deviam estar. Uma vez que não dizes o que estás a usar, suponho que o problema tem origem numa leitura anterior, e que no buffer estar uma mudança de linha a mais. Se for esse o caso, na leitura anterior deverias remover a mudança de linha.

eu repondi a tua ultima pergunta! o programa não indicava qualquer erro..apenas quando compilava, nao deixava!

deixava se eu mete-se Director extends Funcionario , mas Director extends Pessoa nao deixava..por isso recorri ao forum!

quando a minha ultima duvida, eu tentei expor o melhor possivel o meu problema..ate meto um exemplo de codigo! e acho que qql pessoa que faça um scan em java (pelo menos iniciantes em programação como eu) sabe que para tal é preciso colocar esta instrução "Scanner teclado = new Scanner (System.in);" de onde aparece o teclado ou de onde poderia aparecer qql outro nome dai nao achar necessário chegares tao longe como "ainda não sou capaz de ler pensamentos de pessoas que estão a tentar transmitir ideias através de um fórum de discussão..."! 


RC

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

eu repondi a tua ultima pergunta! o programa não indicava qualquer erro..apenas quando compilava, nao deixava!

Um programa quando não compila informa sempre de um erro. Neste caso, dado que usas o NetBeans IDE, ou o erro é mostrado a vermelho no local onde está, com uma indicação na barra lateral esquerda do editor de código. Ou ao executares/compilares o programa, o erro é mostrado na janela de output, que se não alteraste as definições aparece no fundo do IDE. De qualquer modo existe sempre um erro que te é mostrado e esse erro é importante para se poder ajudar.

deixava se eu mete-se Director extends Funcionario , mas Director extends Pessoa nao deixava..por isso recorri ao forum!

Isto não faz sentido, o erro terá de estar noutro lado, mas sem a mensagem de erro é complicado saber o que se está a passar. Tentando adivinhar, possivelmente o problema estará nos construtores, mas posso estar completamente errado.

quando a minha ultima duvida, eu tentei expor o melhor possivel o meu problema..ate meto um exemplo de codigo! e acho que qql pessoa que faça um scan em java (pelo menos iniciantes em programação como eu) sabe que para tal é preciso colocar esta instrução "Scanner teclado = new Scanner (System.in);"

Apenas digo que, mesmo tentando expor o melhor possível, é preciso algumas informações que não deste. O código é pouco e não tem os pontos importante, como o caso do tipo de variável. Por acaso tem sido comum ver o uso da classe Scanner mas essa nem é a classe mais usada para ler dados do teclado, o único local onde uso a classe é aqui neste fórum quando falam nisso, de resto todo o código que faço usa outro tipo de leitura e outros fóruns onde participo não é comum aparecerem iniciantes a usar esta classe.

Scanner é uma classe para escrita rápida, mas para criar código funcional e que não dê os problemas que tiveste relacionados com o buffer, Scanner é uma péssima classe. Para quem está a iniciar parece ser a que por aqui mais se recomenda mas é uma classe que esconde tudo o que é importante saber para leitura de dados através de teclado.

Tens de perceber que quem lê as mensagens não tem o teu código, não está a ver o tutorial ou o projecto que estás a fazer e muito facilmente tem uma visão diferente e conhecimentos diferentes que atrapalham a comunicação. Não podes assumir que é normal alguém saber parte do que tens no código, por muito comum que essa parte te pareça ser.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Baderous

Knitter, qual é a tua sugestão para substituição da classe Scanner? Alguma das classes de streams de leitura existentes (possivelmente aninhadas)?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Knitter

Knitter, qual é a tua sugestão para substituição da classe Scanner? Alguma das classes de streams de leitura existentes (possivelmente aninhadas)?

Sempre o uso de streams de leitura, que não a classe Scanner, preferencialmente com construção de streams com buffers.

Por exemplo, para ler texto: new BufferedReader(new InputStreamReader(<stream origem>));

Mas dependerá do que se pretende fazer, a classe Scanner tem alguns métodos úteis para despachar código de leitura de dados pelo teclado, mas mais que isso e torna-se trabalhoso manter toda a leitura, remover dados do buffer interno, etc.

Um bufferedreader, uma leitura linha a linha, e depois tratar os dados de acordo com a aplicação. Além disso, usar streams primeiro e só depois a classe Scanner obriga-te a aprender o que estás a fazer, em oposição a aprender a usar meia dúzia de métodos da classe.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.