Qualquer maneira de estender duas ou mais classs em java?

Eu sei que o Java não nos permite estender mais de uma class. Eu sei que interfaces também existem e eu não quero usá-las dessa vez. Existe algum tipo de truque ou solução alternativa para estender várias classs em Java? Se sim, inclua também o código de exemplo.

Você pode fazer isso facilmente com interfaces e composição.

A questão é por que você perguntaria isso? Por que você não quer usar interfaces “neste momento”?

Você precisa saber que o Java permite apenas inheritance única de implementação. Você passou sete meses no SO, então certamente você deve saber como usar o recurso de pesquisa. A pergunta foi feita aqui repetidamente.

Seja mais criativo. Não há razão para que um JPanel tenha que ser Observável. O JPanel é para renderização . Concordo que os dados do modelo podem ser observáveis. Por todos os meios fazê-lo com a composição.

Não, ao contrário do C ++, você não pode estender várias classs, mas pode implementar várias interfaces.

NÃO.

vá para interfaces .Nenhuma inheritance in Java. múltipla inheritance in Java.

Herança múltipla pode causar o problema do diamante.

JAVA omite muitos resources raramente usados, pouco compreendidos e confusos do C ++ que, em nossa experiência, trazem mais sofrimento do que benefício. Isso consiste principalmente de sobrecarga de operador (embora tenha sobrecarga de método), inheritance múltipla e extensas coerções automáticas _ Dr. James Gosling

Herança múltipla em java geralmente é feita através da implementação de várias interfaces. Você não pode estender mais de uma class. Uma possível solução alternativa pode ser usar algum tipo de composição de object, por exemplo, agregação.

pode ser isso ajuda

  class One{ void oneMethod(){ } } class Two extends One{ void TwoMethod(){ } } class Abc extends Two{ @Override void oneMethod() { // TODO Auto-generated method stub super.oneMethod(); } @Override void TwoMethod() { // TODO Auto-generated method stub super.TwoMethod(); } } 

Java não suporta isso para classs.Você pode usar várias interfaces.Você pode encontrar o que o problema com inheritance múltipla em java

Você pode usar classs internas como

  public class class1 extends class2{ class Inner extends class3{ } } 

VEJA AQUI

Herança múltipla adiciona complexidade com poucos benefícios, é por isso que não está presente em java Por que inheritance múltipla não é permitida em Java ou C #?

Uma maneira que posso pensar é escrever seu programa precisando de inheritance múltipla em uma linguagem que o suporte egC ++ e então fazer seu código Java interagir com a saída desse programa, por exemplo, usando arquivos ou bancos de dados.

A resposta é não. Mas você pode fazer isso se ajuda:

A estende B
B estende C

então A estende B e C

Use interfaces em vez disso. O seguinte é como isso ficaria no código:

 public Class ClassName implements Interface1, Interface2 { Methods, fields etc... } 

Para evitar problemas de diamante, o Java não suporta a inheritance múltipla através de classs, mas suporta o uso de interfaces. Então você pode usar o relacionamento de associação. por exemplo

 Class A {} Class B {} Class C implements SomeInterface { A a; B b; // setter getter for a and b and other methods } 

Você pode usar uma pesquisa de resources.

 class Vehicle { T  lookup(Class klazz) { return map.get(klazz); // typically } } interface Flyable { void fly(); } Vehicle x; Flyable f = x.lookup(Flyable.class); if (f != null) { f.fly(); } 

Isso separa as classs. Requer verificação de tempo de execução embora.

Ele usa delegação: membros locais que implementam a class / interface de pesquisa.

Vantagem:

Você pode derivar uma class do veículo que pode voar (Flyable) e mergulhar (mergulho). O vôo pode ser implementado por uma instância de uma class compartilhada. Você pode até mesmo compor resources dinamicamente (adicionar rodas a um barco).

Geralmente, isso é melhor do que implementar várias interfaces, em que fly() seria uma cópia de código ou delegado para um campo Flyable (com class de implementação compartilhada).

Especialmente com múltiplas interfaces / classs envolvidas, você de outra forma arrisca código em objects de class base (Veículo aqui) com casos e lançamentos inseguros, esquecendo if (x instanceof Boat) .

Vou incomodar muitas pessoas dizendo sim que você pode – mais ou menos .

Certamente não é fácil e você precisa usar reflection, mas aqui você encontrará um exemplo que permite estender dinamicamente um object com outro. Obviamente, uma vez que você pode fazer isso, você pode estender outro também.

Essencialmente, ele usa a class Proxy para interceptar chamadas de método e direcioná-las para um ou outro de dois objects – isso implementa A overrides B Isso não é exatamente o que você está procurando, mas pode ser facilmente ajustado para detectar methods que existem em ambas as classs e chamá-los de ambos – assim, alcançar A extends B dinamicamente – mais ou menos.

Observe que você precisa ler a seção intitulada Dynamic Object Adapter usando a seção Dynamic Proxies do link.