Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
iniciante

duvida em Programação Orientada a Objectos

Recommended Posts

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

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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.  :)

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites
Baderous

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.