Java Orientado a objetos: aqui organizamos o conhecimento básico de objetos orientados para ajudar todos a aprender e entender. Espero que possa ajudar a todos. Aqui estão o conhecimento relevante compilado com base nas informações da entrevista da empresa:
A diferença entre sobrecarga e substituição. O método sobrecarregado pode alterar o tipo de valor de retorno?
Sobrecarga significa sobrecarga e substituir significa substituir, ou seja, reescrever. Sobrecarga de sobrecarga significa que pode haver vários métodos com o mesmo nome na mesma classe, mas as listas de parâmetros desses métodos são diferentes (ou seja, o número ou tipo de parâmetros são diferentes).
Reescrever substituir significa que o método na subclasse pode ser exatamente o mesmo que o nome e os parâmetros de um método na classe pai. Quando esse método é chamado através do objeto de instância criado pela subclasse, o método de definição na subclasse será chamado, o que é equivalente a substituir exatamente o mesmo método definido na classe pai. Isso também é uma manifestação do polimorfismo da programação orientada a objetos.
A substituição pode ser traduzida como substituição. Como você pode literalmente saber, ele está substituindo um método e reescrevendo -o para obter diferentes funções. A substituição mais familiar para nós é a implementação de métodos de interface. Em uma interface, o método é geralmente declarado e, quando o implementamos, precisamos implementar todos os métodos de declaração de interface. Além desse uso típico, também podemos substituir os métodos na classe pai em herança. Os seguintes pontos devem receber atenção durante a cobertura:
1. O logotipo do método de sobreposição deve ser exatamente correspondido ao logotipo do método de sobreposição para alcançar o efeito da sobreposição;
2. O valor de retorno do método substituído deve ser consistente com o retorno do método substituído;
3. A exceção lançada pelo método substituído deve ser consistente com a exceção lançada pelo método substituído, ou é uma subclasse;
4. O método substituído não pode ser privado, caso contrário, apenas um novo método é definido em sua subclasse e não é substituído.
A sobrecarga pode ser traduzida como sobrecarga, o que significa definir alguns métodos com o mesmo nome, distinguindo esses métodos, definindo diferentes parâmetros de entrada e, quando chamados, a VM selecionará o método apropriado para executar de acordo com diferentes estilos de parâmetros. Ao usar sobrecarga, preste atenção aos seguintes pontos:
1. Ao usar a sobrecarga, você só pode passar diferentes estilos de parâmetros. Por exemplo, diferentes tipos de parâmetros, número diferente de parâmetros e ordens de parâmetros diferentes (é claro, vários tipos de parâmetros no mesmo método devem ser diferentes, por exemplo, pode ser divertido (int, flutuante), mas não pode ser divertido (int, int));
2. Não pode ser sobrecarregado por meio de permissões de acesso, tipos de retorno e exceções jogadas;
3. O tipo de exceção e o número de métodos não afetarão a sobrecarga;
4. Para herança, se um método tiver direitos de acesso na classe pai e for Priavte, não poderá ser sobrecarregado na subclasse. Se definido, ele define apenas um novo método e não alcançará o efeito da sobrecarga.
Se a lista de parâmetros de vários métodos sobrecarregados for diferente, seus tipos de retornador poderão ser diferentes. Se a lista de parâmetros dos dois métodos for exatamente a mesma, a sobrecarga de sobrecarga não poderá ser alcançada por diferentes valores de retorno. Podemos usar o método de prova reversa para ilustrar esse problema. Por exemplo, quando chamamos o método map.remove (key), embora o método remover tenha um valor de retorno, geralmente não definimos a variável que recebe o resultado de retorno. No momento, assumindo que existem dois métodos nesta classe com exatamente o mesmo nome e lista de parâmetros, apenas porque o tipo de retorno é diferente, o Java não pode determinar qual método o programador deseja ligar, porque não pode ser julgado pelo retorno do tipo de resultado.
O construtor pode ser substituído?
O construtor construtor não pode ser herdado, portanto, a substituição não pode ser substituída, mas a sobrecarga pode ser sobrecarregada.
Uma interface pode ser herdada? Uma classe abstrata pode implementar uma interface? Uma classe abstrata pode herdar a classe de concreto? Uma classe abstrata pode existir? Uma classe abstrata pode ter um método principal estático em uma classe abstrata?
As interfaces podem herdar interfaces. Classes abstratas podem implementar interfaces (implementos). Pode haver métodos principais estáticos em classes abstratas.
A única diferença entre classes abstratas e classes comuns é que elas não podem criar objetos de instância e permitir métodos abstratos.
Ao escrever o método clone (), geralmente há uma linha de código. O que é?
O método clone () é clonar, o que significa copiar o objeto; Ou seja, já existe o objeto A, onde a contém alguns valores válidos, mas se você deseja ter um objeto B, e quaisquer alterações em B não afetarão o valor em A, mas B não é um novo objeto que seja novo.
Cópia: ① O objeto de cópia retorna um novo objeto, não uma referência. ②O diferença entre copiar um objeto e o objeto retornado com o novo operador é que a cópia já contém as informações do objeto original, em vez das informações iniciais do objeto.
O clone tem um comportamento padrão, super.clone (); Porque primeiro, os membros da classe pai devem ser copiados no lugar e, em seguida, os membros são copiados.
Quais são os aspectos dos recursos orientados a objetos
As linguagens de programação orientadas a objetos incluem quatro recursos principais: encapsulamento, herança, abstração e polimorfismo.
1 pacote:
A embalagem é a base para garantir que os componentes do software tenham excelente modularidade. O objetivo da embalagem é alcançar "alta coesão e baixo acoplamento" dos componentes de software para impedir as alterações causadas pela interdependência do programa. Em linguagens de programação orientadas a objetos, os objetos são a unidade mais básica de encapsulamento, e o encapsulamento orientado a objetos é mais claro e mais poderoso que o encapsulamento tradicional da linguagem. O encapsulamento orientado a objetos é encapsular o código que descreve as propriedades e o comportamento de um objeto em um "módulo", isto é, em uma classe. As propriedades são definidas por variáveis e o comportamento é definido pelos métodos. O método pode acessar diretamente as propriedades no mesmo objeto. De um modo geral, lembre -se de montar a variável e o método de acessar essa variável juntos, defina todas as variáveis de membros em uma classe como privada e apenas os métodos da classe podem acessar essas variáveis de membro, o que basicamente implementa o encapsulamento do objeto. Compre um princípio: coloque os métodos e métodos relacionados que operam na mesma coisa na mesma classe e coloque os métodos e os dados que operam na mesma classe.
2. Resumo:
A abstração é descobrir as semelhanças e pontos em comum de algumas coisas e classificá -las em uma classe que considere apenas as semelhanças e pontos em comum dessas coisas e ignora aspectos que não estão relacionados ao tópico e objetivo atuais e se concentrarem em aspectos relacionados ao objetivo atual. Por exemplo, ver uma formiga e um elefante e você pode imaginar como eles são, isso é abstração. A abstração inclui dois aspectos: abstração comportamental e abstração do estado. Por exemplo, defina uma classe de pessoa da seguinte maneira:
classe pessoa {nome da string; Int Age; } Os seres humanos são originalmente coisas muito complexos e têm muitos aspectos, mas como o sistema atual só precisa entender o nome e a idade de uma pessoa, a classe definida acima contém apenas os atributos de nome e idade. Esta é uma abstração. O uso da abstração pode evitar considerar alguns detalhes que não estão relacionados à meta.
3. Herança:
Ao definir e implementar uma classe, ela pode ser feita com base em uma classe existente, e o conteúdo definido pela classe existente é tomado como seu próprio conteúdo, e vários novos conteúdos podem ser adicionados, ou o método original pode ser modificado para torná -lo mais adequado para necessidades especiais. Isso é herança. A herança é um mecanismo pelo qual as subclasses compartilham automaticamente dados e métodos da classe pai. Essa é uma relação entre as classes, o que melhora a reutilização e a escalabilidade do software.
4 polimorfismos:
O polimorfismo refere -se ao tipo específico apontado pela variável de referência definida no programa e as chamadas de método emitidas através da variável de referência não são determinadas durante a programação, mas são determinadas durante a execução do programa, isto é, qual objeto de classe uma variável de referência será apontada e qual o programa de classe emitido pela variável de referência é implementado em qual método pode ser determinado durante o programa. Como a classe específica é determinada apenas quando o programa está em execução, as variáveis de referência podem estar vinculadas a várias implementações diferentes de classe sem modificar o código do programa de origem, o que leva ao método específico da chamada de referência que muda de acordo. Ou seja, o código específico vinculado ao programa é executado sem modificar o código do programa, para que o programa possa selecionar vários estados em execução, que é o polimorfismo. O polimorfismo aumenta a flexibilidade e escalabilidade do software. Por exemplo, o Userdao no código a seguir é uma interface que define o objeto de instância apontado pela variável de referência Userdao e é retornado por daofactory.getdao () quando executado. Às vezes, aponta para a implementação do UserJDBCDAO e, às vezes, aponta para a implementação do UserFhibernatedao. Dessa forma, você pode alterar a implementação de classe específica apontada pelo Userdao sem modificar o código -fonte, resultando no código específico do método userdao.insertuser () também muda de acordo. Ou seja, às vezes é chamado de método de insertuser de userjdbcdao e, às vezes, é chamado de método de insertuser de UserHibernatedao:
Userdao userdao = daofactory.getdao (); userdao.insertUser (usuário);
Qual é o mecanismo para implementar o polimorfismo em Java?
A variável de referência definida pela classe ou interface pai pode apontar para o objeto de instância da classe de implementação da subclasse ou concreto, e o método chamado pelo programa está dinamicamente ligado durante o tempo de execução. É o método que se refere ao objeto de instância específico apontado pela variável, ou seja, o método do objeto que está em execução na memória, em vez do método definido no tipo da variável de referência.
Qual é a diferença entre classe abstrata e interface?
Uma classe contendo modificador abstrato é uma classe abstrata, um objeto de instância que não pode ser criado por classe abstrata. As classes que contêm métodos abstratas devem ser definidas como classe abstrata, e os métodos em classes abstratas de classe não precisam ser abstratos. A definição de métodos abstratos na classe abstrata deve ser implementada na subclasse concreta; portanto, não pode haver construtores abstratos ou métodos estáticos abstratos. Se a subclasse não implementar todos os métodos abstratos na classe pai abstrata, a subclasse também deverá ser definida como o tipo abstrato.
Pode -se dizer que uma interface é um caso especial de uma classe abstrata, e todos os métodos em uma interface devem ser abstratos. A definição do método na interface padrão é o tipo de resumo público e o tipo de variável de membro na interface padrão na final estática pública.
A diferença gramatical entre os dois:
1. Classes abstratas podem ter métodos de construção, mas não em interfaces.
2. Pode haver variáveis de membros comuns em classes abstratas, mas não há variáveis de membros comuns na interface.
3. Classes abstratas podem conter métodos comuns não abstraídos. Todos os métodos na interface devem ser abstratos e não podem haver métodos comuns não abstraídos.
4. Os tipos de acesso de métodos abstratos em classes abstratos podem ser públicas, protegidas e (o tipo padrão, embora não haja erro no eclipse, não deve funcionar), mas os métodos abstratos na interface podem ser apenas do tipo público, e o padrão é o tipo de abstrato público.
5. Classes abstratas podem conter métodos estáticos, mas as interfaces não podem conter métodos estáticos.
6. Ambas as classes abstratas e interfaces podem conter variáveis estáticas de membros. O tipo de acesso de variáveis de membros estáticos nas classes abstratas pode ser arbitrário, mas as variáveis definidas na interface só podem ser o tipo final público estático, e o padrão é o tipo final estático público.
7. Uma classe pode implementar várias interfaces, mas só pode herdar uma classe abstrata.
A diferença entre os dois no aplicativo:
As interfaces desempenham um papel nos métodos de design de arquitetura do sistema, usados principalmente para definir contratos de comunicação entre os módulos. As classes abstratas desempenham um papel na implementação do código e podem realizar a reutilização do código. Por exemplo, o padrão de design do método do modelo é uma aplicação típica de classes abstratas. Supondo que todas as classes de servlet em um determinado projeto devem usar o mesmo método para fazer julgamentos de permissão, registrar logs de acesso e lidar com exceções, então você pode definir uma classe base abstrata, para que todos os servlets possam herdar essa classe base abstrata, completar os julgamentos de permissão. O pseudo-código é o seguinte:
A classe abstrata pública BaseServlet estende HttpServlet {public Final Void Service (Solicitação HttpServletRequest, HTTPServletResponse Response) lança ioexcioning, servletexception {registrar log log para julgamento de permissão se (com permissão) {Try) {DosService (Solicitação »} Catching (CATCIMENTO (com permissão) {Try) {) Doservice (solicitação httpServletRequest, resposta httpServletResponse) lança ioexcioning, servletexception; // Observe que a permissão de acesso é definida como protegida, que parece profissional e rigorosa, porque é a classe pública myServlet1 estende a base {Doservice de void protegido (httpServletRequest Solicy, httpServletResponse Response) lança ioexction, servlexception {{Business Codics Codices Logics CodicesUma certa parte do código no meio do método da classe pai é incerta, então eu o deixo para a subclasse, por isso uso o método de modelo para projetar o padrão.
O método abstrato pode ser estático ao mesmo tempo, pode ser nativo ao mesmo tempo e pode ser sincronizado ao mesmo tempo?
O método de resumo não pode ser estático, porque os métodos abstratos devem ser implementados por subclasses, e estática não tem nada a ver com subclasses!
O método nativo significa que o método precisa ser implementado em outra linguagem de programação dependente da plataforma e não há problema em implementação de subclasse, portanto não pode ser abstrato e não pode ser misturado com abstrato. Por exemplo, a classe FileOutputSteam precisa ser tratada com hardware, e a implementação subjacente usa implementações de API relacionadas ao sistema operacional. Por exemplo, ele é implementado no idioma C no Windows. Portanto, analisando o código -fonte do JDK, você pode descobrir que a definição do método aberto do FileOutputStream é o seguinte: o nativo privado nativo aberto (nome da string) lança fileNotfoundException;
Se quisermos usar o Java para chamar a função de idioma C escrita por outras pessoas, não podemos chamá -la diretamente. Precisamos escrever uma função de idioma C de acordo com os requisitos do Java, e nossa função de idioma C chamará as funções do idioma C de outras pessoas. Como nossa função de idioma C é escrita de acordo com os requisitos do Java, nossa função de idioma C pode ser conectada ao Java. O método de acoplamento em Java é definir o método correspondente à nossa função C. Os métodos correspondentes no Java não precisam escrever código específico, mas o nativo precisa ser declarado anteriormente.
Para sincronizado, o objeto de bloqueio de sincronização usado pela sincronização sincronizada no método é esse, e o método abstrato não pode determinar o que é isso.
O que é uma classe interna? A classe aninhada estática é diferente da classe interna.
Uma classe interna é uma classe definida dentro de uma classe. Os membros estáticos não podem ser definidos em uma classe interna. Os membros estáticos não são as características de um objeto. Eles só precisam encontrar um lugar para morar, então precisam ser colocados em uma aula. A classe interna pode acessar diretamente as variáveis do membro na classe externa. A classe interna pode ser definida fora dos métodos da classe externa ou no corpo do método da classe externa, como mostrado abaixo:
classe pública externa {int out_x = 0; public void method () {Inner1 Inner1 = new Inner1 (); classe pública Inner2 // Classe Interior definida dentro do corpo do método {public métod () {out_x = 3; }} Interno2 interno2 = new Inner2 (); } classe pública Inner1 // Classe interna definida fora do corpo do método {}} Os tipos de acesso da classe interna definidos fora do corpo do método podem ser públicos, protegidos e privados padrão. É como as variáveis de membro definidas na classe têm 4 tipos de acesso, que determinam se a definição da classe interna é visível para outras classes. Nesse caso, também podemos criar um objeto de instância da classe interna fora. Ao criar um objeto de instância da classe interna, devemos primeiro criar um objeto de instância da classe externa e depois usar o objeto de instância da classe externa para criar um objeto de instância da classe interna. O código é o seguinte:
Exterior externo = novo externo ();
Exter.inner1 Inner1 = Outer.New Innner1 ();
Não pode haver modificadores de tipo de acesso antes da classe interna definida dentro do método, assim como as variáveis locais definidas no método, mas os modificadores finais ou abstratos podem ser usados antes da classe interna. Essa classe interna não é visível para outras classes e não pode se referir a essa classe interna, mas os objetos de instância criados por essa classe interna podem ser passados para outras classes para acessar. Esse tipo de classe interna deve ser definida primeiro e depois usada, ou seja, o código de definição da classe interna deve aparecer antes de usar a classe, que é o mesmo que o princípio que as variáveis locais no método devem ser definidas primeiro e depois usadas. Essa classe interna pode acessar variáveis locais no corpo do método, mas o modificador final deve ser adicionado antes da variável local.
No corpo do método, a sintaxe a seguir pode ser usada para criar uma classe interna anônima, ou seja, enquanto definindo uma certa interface ou subclasse de uma classe, um objeto de instância da subclasse também é criado sem definir um nome para a subclasse:
public class. }}
Por fim, você pode prefixar a classe interna definida fora do método para adicionar uma palavra -chave estática à classe aninhada estática. Não tem mais as características de uma classe interna. Tudo, em sentido estreito, não é uma classe interna. A classe aninhada estática não é diferente no comportamento e função das classes comuns em tempo de execução, mas existem algumas diferenças na sintaxe ao programar referências. Pode ser definido como tipos públicos, protegidos, inadimplentes, privados e outros, enquanto classes comuns só podem ser definidas como tipos públicos e padrão. O nome da classe estática de classe aninhada fora é "Nome da classe externa.inner Nome da classe". Você pode criar uma classe aninhada estática diretamente sem criar um objeto de instância de uma classe externa fora. Por exemplo, se o interno for uma classe estática aninhada definida na classe externa, você pode usar a seguinte declaração para criar a classe interna:
Exter.inner interno = new Outer.inner ();
Como a classe aninhada estática não depende de objetos de instância de classes externas, a classe aninhada estática pode acessar variáveis não estáticas de membros de classes externas. Ao acessar a classe aninhada estática em uma classe externa, você pode usar diretamente o nome da classe aninhada estática sem adicionar o nome da classe externa. Na classe aninhada estática, você também pode consultar diretamente as variáveis estáticas do membro da classe externa sem adicionar o nome da classe externa.
A classe interna definida em um método estático também é uma classe aninhada estática. Neste momento, você não pode adicionar a palavra -chave estática antes da classe. A classe estática aninhada em um método estático é muito semelhante ao método de aplicação da classe interna em métodos comuns. Além de acessar diretamente as variáveis estáticas do membro na classe externa, ele também pode acessar variáveis locais no método estático. No entanto, o modificador final deve ser adicionado antes da variável local.
Uma classe interna pode referenciar seus membros da classe que contém? Existem restrições?
Está totalmente OK. Se não for uma classe interna estática, não há limite!
Se você tratar as classes aninhadas estáticas como um caso especial de classes internas, neste caso, não poderá acessar variáveis de membros comuns da classe externa, mas apenas membros estáticos da classe externa. Por exemplo, o seguinte código:
classe externa {static int x; classe estática interna {void test () {syso (x); }}}}Classe interna anônima (classe interna anônima) pode estender (herdar) outras classes e pode implementar (implementar) interface (interface)?
Você pode herdar outras classes ou implementar outras interfaces. Não só pode, mas deve!
Por exemplo:
importar java.util.date; public class Test estende a data {public static void main (string [] args) {new test (). test (); } public void test () {System.out.println (super.getClass (). getName ()); }} O resultado é teste
No método de teste, o método getClass (). GetName () é chamado diretamente e o nome da classe de teste é retornado. Como getClass () é definido como final na classe de objeto, a subclasse não pode substituir o método. Portanto, chamando getClass (). GetName () Método no método de teste está realmente chamando o método getClass () herdado da classe pai, o que é equivalente a chamar o método Super.getClass (). GetName (). Portanto, o método super.getClass (). GetName () também deve retornar o teste. Se você deseja obter o nome da classe pai, use o seguinte código:
getClass (). getSuperclass (). getName ();
Qual é a diferença entre orientados a objetos e orientados a processos
1O ponto de partida é diferente. A abordagem orientada a objetos é lidar com a questão do mundo objetivo de uma maneira que esteja em conformidade com o pensamento convencional. Ele enfatiza que os pontos -chave do domínio do problema são aludidos diretamente à interface entre os objetos. A abordagem orientada ao processo enfatiza a abstração e modularidade do processo, que é uma construção centrada no processo ou lidando com problemas mundiais objetivos.
2. O método orientado a objetos usa a lógica do computador para simular a existência física no mundo objetivo e usa a classe de coleta de objetos como a unidade básica para lidar com problemas, de modo a tornar o mundo do computador mais próximo do mundo objetivo o máximo possível, de modo a tornar o problema de lidar com problemas mais direto e claro. O método orientado a objetos usa a hierarquia de classes para refletir a herança e o desenvolvimento entre as classes, enquanto o método de processo orientado a objetos lida com problemas com a unidade básica que permite o módulo que expressa com clara e precisão o processo, usa a hierarquia de módulos para resumir os objetivos e as funções entre os módulos ou os módulos, e abstrairem os problemas dos objetivos.
3O método de processamento de dados é diferente do método do programa de controle. O método orientado a objetos encapsula dados e o código correspondente em um todo. Em princípio, outros objetos não podem modificar diretamente seus dados, ou seja, a modificação dos objetos só pode ser concluída por suas próprias funções de membro. O método do programa de controle é ativar e executar o programa por meio de "orientado a eventos". O processo orientado a objetos processa diretamente os dados por meio do programa, e os resultados do processamento são exibidos após a conclusão do processamento. Em termos de controle do programa, o programa é chamado ou devolvido ao programa de acordo com o design e não pode ser navegação. Existe uma relação entre os módulos, entre o controle e o controle, e a chamada e a chamada.
4O projeto de análise e métodos de conversão de codificação são diferentes. Uma análise de uma abordagem orientada a objetos ao longo do ciclo de vida do software. No design e codificação, é um processo suave. Da análise ao design e depois à codificação, ele usa um modelo consistente para exibir, ou seja, é uma conexão perfeita. O método de processo orientado a objetos enfatiza a conversão entre design analítico e codificação de acordo com as regras, e a análise e design e codificação ao longo do ciclo de vida do software são alcançados.
Quais são as vantagens do desenvolvimento orientado a objetos
1 maior eficiência do desenvolvimento. O uso de desenvolvimento orientado a objetos pode abstrair coisas reais e mapear diretamente práticas reais em objetos desenvolvidos.
2 Verifique a robustez do software. É precisamente porque o método de desenvolvimento orientado a objetos tem alta reutilização. Durante o processo de desenvolvimento, o código existente que foi testado em campos relacionados foi reutilizado. Portanto, naturalmente desempenha um bom papel na promoção da robustez do software.
3 Verifique se a alta manutenção do software. Devido ao método de desenvolvimento orientado a objetos, o código é muito bem legível. Ao mesmo tempo, o padrão de design orientado a objetos torna a estrutura de código mais clara. Ao mesmo tempo, para o modelo de desenvolvimento orientado a objetos, já existem muitos padrões de design muito maduros. Esses padrões de design podem permitir que os programas apenas modifiquem alguns módulos ao enfrentar mudanças na demanda, porque é mais conveniente manter.
Qual é a diferença entre isso e super
No idioma java, isso aponta para o objeto de instância atual. Uma de suas funções muito importantes é distinguir as variáveis de membro de um objeto dos parâmetros formais de um método (quando o nome de um método participa da variável de membro, a variável do membro será substituída).
Super pode ser usado para acessar métodos ou variáveis de membro da classe pai. Quando o método ou a variável de membro da classe criança tiver o mesmo nome da classe pai, o método ou a variável de membro da classe pai também será substituída. Se você deseja acessar o método ou a variável de membro da classe pai, você só pode acessá -lo através da Super Keyword
Como obter o nome da classe da classe pai
O idioma java fornece um método para obter o nome da classe: getClass (). GetName (). Os desenvolvedores podem chamar esse método para obter o nome da classe. No entanto, para herança, o nome da classe da classe pai não pode ser obtido chamando o método getClass (). GetName () da classe pai, por exemplo:
Classe a {} public class Test estende um {public void test () {System.out.println (super.getclass (). GetName ());} public static void main (string []) args) {new test.test ();}}O resultado da execução do programa é o teste. O motivo é que qualquer classe no idioma Java herda da classe de objeto. O método getClass é definido como o nativo final na classe de objeto. As subclasses não podem substituir esse método. Portanto, this.getclass () e super.getClass () finalmente ligue para o método getClass () na classe de objeto. A definição do método getClass () na classe de objeto é: retorne a classe de tempo de execução desse objeto. O código do nome da classe pai pode ser obtido na subclasse através do mecanismo de reflexão de Java da seguinte maneira:
Classe A {} public class Test estende um {public void test () {System.out.println (this.getclass (). GetSuperclass (). GetName ());} publicci estático void main (string [] args) {new test (). Test ();}}}}}}Qual é a diferença entre combinação e herança
Composição e herança são duas maneiras de reutilizar o código em objetos orientados a objetos. A combinação refere -se à criação de objetos da classe original em uma nova classe e reutilizando as funções da classe existente. A herança é uma das principais características da orientação de objetos, que permite aos designers definir a implementação de uma classe com base na implementação de outras classes. Tanto a composição quanto a herança permitem a definição de objetos filhos em novas classes, exceto que a composição é exibida, enquanto a herança está implícita. Existe uma correspondência entre combinação e herança: toda a classe na composição corresponde à subclasse na herança, e a classe local na composição corresponde à classe pai em herança. Ao usá -lo, siga os dois princípios a seguir:
1 A menos que exista um relacionamento "IS-A" entre duas classes, não use herança facilmente, porque o uso excessivo da herança destruirá a manutenção do código. Quando a classe pai for modificada, afetará todas as subclasses herdadas dela.
2. Não use a herança apenas para alcançar o polimorfismo. Se a relação entre as classes não for um "IS-A", você poderá obter o mesmo objetivo implementando interfaces e combinações.
Como o idioma Java suporta apenas a herança única, se você deseja herdar duas ou mais classes ao mesmo tempo, ela não pode ser implementada diretamente em Java. Ao mesmo tempo, no idioma Java, se for alcançada muita herança, o conteúdo de uma classe ficará inchado. Portanto, no idioma Java, se você puder usar combinações, tente não usar a herança.
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!