El lenguaje java permite redefinir miembros de la clase base en las clases derivadas, pero el compilador emite una advertencia cuando detecta una redefinición. Una advertencia (warning) es un mensaje del compilador acerca de un posible problema. Sin embargo, en este caso sí se genera código ejecutable (a diferencia del mensaje de error). Redefinición de campos. El siguiente ejemplo muestra cómo reutilizar los identificadores de los campos de la clase base en una clase derivada. Ejemplo // Redef.cs : Ejemplifica la redefinición de campos en clases derivadas. class Punto { public int x; public int y; } class Punto 3 D? : Punto { public int x ; public int y ; public int z ; } class Principal { public static void Main( ) { Punto a = new Punto( ); Punto 3 D b = new Punto 3 D( ); a.x = 100 ; a.y = 200 ; b.x = 300 ; b.y = 400 ; b.z = 500 ; } } El compilador envía dos advertencias al generar el código ejecutable: …”La palabra clave new es necesaria en ‘Punto 3 D.x’ porque oculta el miembro heredado ‘Punto.x’ “… …”La palabra clave new es necesaria en ‘Punto 3 D.y’ porque oculta el miembro heredado ‘Punto.y’ “… La palabra clave new tiene dos implementaciones diferentes: como operador y como modificador. • El operador new se usa para crear objetos ( p.ej. Cuenta c = new Cuenta(); ) • El modificador new se usa para ocultar un miembro heredado de un miembro de clase base (p.ej. new public int x; ) El código del archivo Redef2.cs muestra las correcciones aplicadas a Redef.cs , para ocultar los campos x y, evitando que el compilador emita advertencias. // Redef2.cs : Ejemplifica la redefinición de campos en clases derivadas, sin emitir advertencias. class Punto { public int x; public int y; } class Punto 3 D : Punto { new public int x ; new public int y ; public int z ; } class Principal { public static void Main( ) { Punto a = new Punto( ); Punto 3 D b = new Punto 3 D( ); a.x = 100 ; a.y = 200 ; b.x = 300 ; b.y = 400 ; b.z = 500 ; } } Redefinición de métodos. Ejemplo // Redef Met.cs : Muestra la redefinición de métodos en clases derivadas. using C=System.Console; class A { public void x( ) { C.Write Line?( “A.x” ) ; } } class B : A { new public void x( ) { C.Write Line( “B.x” ) ; } }

class Principal { static void Main ( ) { A objeto1 = new A( ) ; B objeto2 = new B( ) ; objeto1.x( ) ; objeto2.x( ) ; } }


Google