Metodo sincronizado sobrecarregado e sobrescrito

5 respostas
I

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 :

:?
agradeço =)

5 Respostas

T

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.

public synchronized void abc (int cde) {
    fgh();
}

equivale a isto:

public void abc (int cde) {
    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

opa…
valeu pessoal, tava realmente em duvida.
e arrumei o codigo :wink:

R

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)

Criado 10 de julho de 2007
Ultima resposta 10 de jul. de 2007
Respostas 5
Participantes 5