Você está aqui: Java ::: Perguntas e Respostas ::: Programação Orientada a Objetos |
|
Qual a diferença entre classe abstrata e interface em JavaQuantidade de visualizações: 551 vezes |
|
Esta é uma pergunta clássica feita pelos estudantes de programação orientada a objetos em Java, e merece uma discussão mais aprofundada, com exemplos. Vamos começar então. 1) Uma classe abstrata pode possuir variáveis de instância, enquanto uma interface não pode conter variáveis de instância. Veja: package arquivodecodigos; public interface Boleto{ ...... Este código compila normalmente, mas, dentro da IDE, temos uma advertência do tipo "O nome da constante não segue as convenções de nome codigo". O que é isso? Este warning diz que devemos trocar a variável de instância por uma constante. Veja: package arquivodecodigos; public interface Boleto{ ...... Agora a advertência some, ou seja, uma interface pode possuir constantes, mas não pode possuir variáveis de instância. E isso fazer sentido. Como não é possível usar new para construir uma instância de uma interface, não há vantagem nenhuma em definirmos variáveis de instância nas mesmas. 2) Uma classe abstrata pode possuir um construtor, enquanto uma interface não pode conter métodos construtores. Veja: package arquivodecodigos; public interface Boleto{ // construtor da interface ...... Este código não compila, e temos duas mensagens de erro de compilação: "invalid method declaration: return type required" e "interface abstract methods cannot have body". Novamente isso faz sentido. Como não podemos usar new para construir um objeto de uma interface, não há porque ela possuir métodos construtores. 3) Uma classe abstrata pode conter métodos implementados com corpo (método não abstratos), enquanto uma interface pode conter somente métodos abstratos (sem corpo). Veja: package arquivodecodigos; public interface Boleto{ ...... Este código não compila, e temos a mensagem de erro de compilação "interface abstract methods cannot have body". Para corrigir, basta retirarmos o corpo do método: package arquivodecodigos; public interface Boleto{ ...... Agora o código compila normalmente, uma vez que o objetivo da interface é delegar a funcionalidade de seus métodos às classes que optarem por implementá-las (implements). Mas, tenha em mente que, a partir do Java 1.8, uma interface pode ter métodos estáticos. Veja: package arquivodecodigos; public interface Boleto{ public static int somar(int a, int b){ return a + b; ...... |
|
Link para compartilhar na Internet ou com seus amigos: | |
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Exercícios Resolvidos de Python - Criando dois vetores de inteiros de forma que a soma dos elementos individuais de cada vetor seja igual a 30Quantidade de visualizações: 500 vezes |
Pergunta/Tarefa: Considere os seguintes vetores: # dois vetores de 5 inteiros cada a = [50, -2, 9, 5, 17] b = [0 for x in range(5)] Sua saída deverá ser parecida com: Valores no vetor a: 50 -2 9 5 17 Valores no vetor b: -20 32 21 25 13 Veja a resolução comentada deste exercício usando Python: # método principal def main(): # dois vetores de 5 inteiros cada a = [50, -2, 9, 5, 17] b = [0 for x in range(5)] # vamos preencher o segundo vetor de forma que a soma dos # valores de seus elementos seja 30 for i in range(len(a)): b[i] = 30 - a[i] # vamos mostrar o resultado print("Valores no vetor a: ", end="") ...... |
C# ::: Desafios e Lista de Exercícios Resolvidos ::: C# Básico |
Exercícios Resolvidos de C# - Como somar dois números em C# - Escreva um programa C# que leia dois números e mostre a sua somaQuantidade de visualizações: 2686 vezes |
Pergunta/Tarefa: Escreva um programa C# que leia dois números e mostre a sua soma. Os dois números deverão ser informados pelo usuário e você deverá efetuar a leitura como dois inteiros e mostrar a soma também como um inteiro. Os valores informados pelo usuário podem ser positivos ou negativos. Sua saída deverá ser parecida com: Informe o primeiro valor: 8 Informe o segundo valor: 3 A soma dos dois valores é: 11 Veja a resolução comentada deste exercício usando C#: using System; namespace Estudos { class Program { static void Main(string[] args) { // vamos ler o primeiro número Console.Write("Informe o primeiro valor: "); int n1 = int.Parse(Console.ReadLine()); // vamos ler o segundo número Console.Write("Informe o segundo valor: "); int n2 = int.Parse(Console.ReadLine()); ...... |
C ::: Estruturas de Dados ::: Lista Ligada Simples |
Estruturas de Dados em C - Como inserir antes de um determinado nó em uma lista encadeada simples usando CQuantidade de visualizações: 1583 vezes |
Em algumas situações nós precisamos inserir o novo nó antes de um determinado nó na lista encadeada simples. Veja, por exemplo, uma lista com o seguintes valores: 45 | 3 | 98 | 47 Suponha que queremos inserir o valor 50 antes do 98, então o novo conteúdo da lista será: 45 | 3 | 50 | 98 | 47 Observe que neste exemplo eu tratei o caso de inserir antes do primeiro nó, ou seja, antes do 45, mas não tratei a lista vazia. Há também a questão do laço infinito caso o usuário queira inserir antes de um nó não existente (não tratada). Veja o código completo: #include <stdio.h> #include <stdlib.h> // estrutura Nó struct No{ int valor; struct No *proximo; }; // fim da estrutura Nó // função que permite exibir os valores de // todos os nós da lista void exibir(struct No *n){ if(n != NULL){ do{ printf("%d\n", n->valor); n = n->proximo; }while(n != NULL); } else printf("A lista esta vazia\n\n"); } // função que permite inserir um novo nó // antes de um determinado valor struct No *inserir_antes_valor(struct No *n, int v, int v_antes){ // reserva memória para o novo nó struct No *novo = (struct No*)malloc(sizeof(struct No)); novo->valor = v; // guarda o nó antes do valor que procuramos struct No *anterior = NULL; struct No *temp = n; // aponta para o início da lista // enquanto for diferente do valor que estamos procurando while(temp->valor != v_antes){ anterior = temp; // anterior recebe temp // e temp recebe o seu próximo temp = temp->proximo; } // ATENÇÃO: não estamos tratando a condição // de lista vazia. Para isso veja minha dica // sobre como inserior no início da lista // devemos inserior no início da lista? if(anterior == NULL){ // o próximo do novo nó é o início da lista novo->proximo = n; n = novo; // início da lista é o novo nó } else{ // o proximo do anterior é o novo nó anterior->proximo = novo; // e o próximo do novo nó é temp novo->proximo = temp; } return n; } // função que permite inserir nós no // final da lista. // veja que a função recebe o valor a ser // armazenado em cada nó e um ponteiro para o // início da lista. A função retorna um ...... |
PHP ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como remover e retornar o primeiro elemento de um array PHP usando a função array_shift()Quantidade de visualizações: 8782 vezes |
A função array_shift() do PHP remove o primeiro elemento de um vetor (array) e retorna o seu valor. Nesse caso, se as chaves, ou índices, do vetor forem do tipo númerico, elas serão reorganizadas. Veja um exemplo de seu uso no código PHP a seguir: <?php /* Este exemplo mostra como usar a função array_shift() para extrair e retornar o primeiro elemento de um array */ $pessoas[0] = "Carlos"; $pessoas[1] = "Juliana"; $pessoas[2] = "Igor"; $pessoas[3] = "Marcelo"; // extrai o primeiro elemento ...... Ao executar este código PHP nós teremos o seguinte resultado: O elemento extraido foi: Carlos O array contém agora 3 elementos |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como criar sua própria função substring() para obter uma substring a partir de uma string em CQuantidade de visualizações: 16533 vezes |
Em algumas situações precisamos obter uma substring a partir de uma string. A linguagem C já fornece algumas funções que tornam isso possível. No entanto, nenhuma destas funções permite especificar o índice inicial da substring. Sendo assim, o trecho de código abaixo mostra como escrever uma função substring() que permite informar a string de origem, o índice inicial e a quantidade de caracteres que serão obtidos. O retorno da função será um ponteiro para a substring obtida:#include <stdio.h> #include <stdlib.h> #include <string.h> char *substring(char *origem, int inicio, int quant){ char *res = origem; int i = 0; // posição inicial menor que 0 ou // posição inicial muito exagerada? if((inicio < 0) || (inicio > strlen(origem))) inicio = 0; // quantidade de caracteres muito exagerada? if(quant > inicio + strlen(origem)) quant = strlen(origem) - inicio; // obtem os caracteres desejados for(i = 0; i <= quant - 1; i++){ res[i] = origem[inicio + i]; ...... Ao executar este código nós teremos o seguinte resultado: muito de C Gosto muito de C e C++ |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
JavaScript - Como retornar o código ASCII ou Unicode associado a um caractere em JavaScript usando a função charCodeAt() |
Quem Somos |
Programador Freelancer - Full Stack Developer, Professional Java Developer, PHP, C/C++, Python Programmer, wxWidgets Professional C++ Programmer, Freelance Programmer. Formado em Ciência da Computação pela UNIP (Universidade Paulista Campus Goiânia) e cursando Engenharia Civil pela PUC-Goiás. Possuo conhecimentos avançados de Java, Python, JavaScript, C, C++, PHP, C#, VB.NET, Delphi, Android, Perl, e várias tecnologias que envolvem o desenvolvimento web, desktop, front-end e back-end. Atuo há mais de 20 anos como programador freelancer, atendendo clientes no Brasil, Portugal, Argentina e vários outros paises.
Entre em contato comigo para, juntos, vermos em que posso contribuir para resolver ou agilizar o desenvolvimento de seus códigos.
|
Programador Freelancer - Formado em Sistemas de Informação pela Faculdade Delta, Pós graduado em Engenharia de Software (PUC MINAS), Pós graduado Marketing Digital (IGTI) com ênfase em Growth Hacking. Mais de 15 anos de experiência em programação Web. Marketing Digital focado em desempenho, desenvolvimento de estratégia competitiva, analise de concorrência, SEO, webvitals, e Adwords, Métricas de retorno. Especialista Google Certificado desde 2011 Possui domínio nas linguagens PHP, C#, JavaScript, MySQL e frameworks Laravel, jQuery, flutter. Atualmente aluno de mestrado em Ciência da Computação (UFG)
Não basta ter um site. É necessário ter um site que é localizado e converte usuários em clientes. Se sua página não faz isso, Fale comigo e vamos fazer uma analise e conseguir resultados mais satisfatórios..
|
Linguagens Mais Populares |
1º lugar: Java |