2010-07-15 19 views
6

Me gustaría saber la razón por la cual esto es permitido por primera vez en Java (o Uy en general) recuerdo que los métodos estáticos son comunes tanto para los padres y el niño de claseRedefiniendo método estático en la clase hija

public class Redefine extends Parent{ 
    public static void test() { 

    } 
} 


class Parent{ 
    public static void test() { 

    } 
} 

Q1: Debido a que Overriding no es compatible con métodos estáticos, ¿cómo pueden ambos classe contener los mismos métodos?

Q2: Si cambia el método en estático para lanzar una excepción no definida, no compila. ¿por qué es el caso? Obviamente no es primordial, así que debería poder lanzar nuevas excepciones ¿no?

public class Redefine extends Parent{ 
    public static void test() throws Exception{ 

    } 
} 

Respuesta

10

A1:: static método son por clase. No tienen nada que ver con las jerarquías de herencia en términos de polimorfismo. Entonces, llamando al Parent.test() llamará al método padre, mientras llama al Redefine.test() llamará al niño.

A2:JLS 8.4.8 escribe:

Si una clase declara un método estático m, entonces la declaración m se dice para ocultar cualquier método m', donde la firma de m es un subsignature (§8.4 .2) de la firma de m ', en las superclases y superinterfaces de la clase que de otro modo serían accesibles para codificar en la clase.

Una declaración de método no debe tener una cláusula throws que entre en conflicto (§8.4.6) con la de cualquier método que sobrescriba u oculte; de lo contrario, se produce un error en tiempo de compilación.

0

Q1: Los métodos estáticos no se anulan, por lo que estos son dos métodos diferentes con la misma firma. Uno se llama con Parent.test(), el otro se llama con Redefine.test()

Q2: Su método parece válido. ¿Qué error obtienes?

+1

re: Q2: Si prueba la versión OP de Redefine.test() que se declara como 'throws Exception' entonces debería obtener el error del compilador' Exception Exception no es compatible con throws clause en Parent.test() ' . – mikej

Cuestiones relacionadas