Olá a todos,
Dei uma procurada na net e no arquivo do fórum-guj e não encontrei uma explicação razoável para seguinte questão: Por que não é permitido usar a “static abstract” na declaração de métodos? Se métodos estáticos podem ser sobrescritos, então por que não podemos definí-los como abstract também? Qual o sentido por trás dessa proibição?
class A {
static abstract void fazAlgo() {} // nao compila
}
Parece que o único válido das palavras chaves “static abstract” juntas é na definição de classes internas estáticas.
class B {
static abstract class C {} // blzinha
}
De antemão agradeço aos que me responderem,
Falou-te!!
cara métodos static não podem ser sobreescritos, somente redefinidos nas classes filhas
por isso nao existe static abstract ( pq com abstract vc ja ta dizendo que quer sobreescrever)
Ola,
Bom, vamos aos conceitos:
Modificador static usado em um metodo informa que o metodo e um metodo de classe, ou seja, ele pode ser acessado sem a necessidade de um objeto, uma instancia, um exemplo classico e o famoso “public static void main(String[])”.
Modificador abstract e usado para definir um contrato entre uma classe e as classes que deveram especializar o tipo, sendo que a classe que defini um metodo abstract tem que necessariamente ser abstract, isto da a nocao que a classe abstract por si so nao tem o comportamento todo que e necessario para sua existencia, ela precisa de uma especializacao, ex.:
Entao, devido aos conceitos de cada modificador, eles sao por si so imcompativeis, nao da para se ter um metodo static abstract, pois seria como se houvesse a necessidade de se ter um contrato de classe para classe… sem uma instancia envolvida…
E voce só pode fazer uma “static abstract class” quando voce quer que ela seja independente da outer class. Pois sem o modificador static a inner consegue acessar os métodos e atributos da outer.