Provavelmente. Se ela só tiver métodos estáticos, não precisaria. Mas isso é uma gambi, e das grossas.
Não obrigatoriamente, como o LPJava te disse. Só para deixar um exemplo, a classe KeyAdapter tem todos os métodos implementados e é abstrata. A diferença é que não você não pode instanciar diretamente um KeyAdapter, só um filho dele.
Puppets:
3) Se uma classe abstrata não tiver métodos a serem implementados ela pode deixar de ser uma superclasse ?
Penso assim porque se uma classe não tiver métodos a serem implementados, não tem sentido ela ser
obrigatóriamente uma superclasse.
Veja novamente o caso do KeyAdapter. Ele simplesmente tem todas as implementações do KeyListener em branco. Faria sentido existir um KeyAdapter não abstrato? Seria um objeto que poderia ser registrado como listener, mas não faria nada. Meio estúpido não? Portanto, no caso do nosso amigo KeyAdapter, não faz sentido ele deixar de ser abstrato, mesmo tendo todos os métodos implementados.
Outro exemplo. Você pode ter uma classe Abstrata com vários métodos protected implementados e nenhum método público. Faria sentido ela deixar de ser abstract? Acho que não.
rmalati:
Para acessar um método não-abstract de uma classe abstract, eu necessariamente precisaria estender esta classe abstract?
Essa dúvida sugiu em relação ao código que o Gilberto colocou.
No caso de um método estático, tanto faz. No caso de um método não estático, sim, só através de um filho da classe abstract vc poderá criar um objeto e acessar o método.