como ficaria as regras pra sobrescrever e sobrecarregar metodos synchronized?
exemplo:
na calsse A eu teria :
na classe B herdando de A e sobrescrevendo o metodo “metodoSincronizado()” como ficaria?
é obrigado ser sincronized tmb? public synchronized void metodoSincronizado(){}
continuando, agora em relaçao a metodos sobrecarregado:
é possivel sobrecarregar o metodo sem usar o sincronized?
desta forma :
A palavra chave “synchronized”, aplicada a métodos, é apenas uma abreviatura para o bloco “synchronized (this)” - se o método não for estático.
publicsynchronizedvoidabc(intcde){fgh();}
equivale a isto:
publicvoidabc(intcde){synchronized(this){fgh();}}
Portanto essa palavra-chave não toma parte na herança - você não precisa fazer com que um método sobreescrito seja “synchronized” na subclasse se ele for “synchronized” na superclasse.
esb
Tudo o que você escreveu é possível. Só corrija a palavra synchronized, que está escrita de forma errada no código.
I
immortalSoul
opa…
valeu pessoal, tava realmente em duvida.
e arrumei o codigo
R
RafaelVS
e no caso da sobrecarga que vc tb perguntou, não tem nenhuma regra… já que um método sobrecarregado na verdade é um outro método tratado diferentemente (a única coisa que tem em comum com outro método é o nome). Portanto, não tem nenhuma regra e ele funciona como um método qualquer, sem nenhum relacionamento especial.
sergiotaborda
immortalSoul:
como ficaria as regras pra sobrescrever e sobrecarregar metodos synchronized?
O essencial já foi dito, queria apenas acrescentar que um método sincronizado normalmente é também final e como tal não se coloca o problema da herança (sobrescrita).
A razão para ser final é que sincronizar o método é um detalhe de implementação que implica em que a classe está envolvida em logicas multithread e portanto a sua implementação depende das interações das threads (que são externas ao objeto). Desse modo a implementação é protegida com final para que a sub classe não tem acesso a essas logicas e portanto não faria sentido sobrescreve-las.
Se ha intenção de usar herança , o padrão template method pode ser usado.
(ou seja, outros métodos são sobreescritos e não o método sincronizado)