Operaciones avanzadas en la
herencia en Java a.) Introducción En el capítulo previo ya se han estudiado los bases de la herencia en Java. Sin embargo, el lenguaje tiene muchas más probabilidades en este aspecto,
como estudiaremos a continuación. Conviene recordar que estamos
utilizando el
codigo de la clase MiPunto, cuyo codigo se puede descubrir en el artículo "II.5. Clases y Objetos" de este tutorial. b.) Los fundamentos globales: static A veces se quiere crear un metodo o una variable que se emplea afuera del contexto de cualquier instancia, es decir, de una forma global a un programa. Todo lo que se tiene que
realizar es declarar estos fundamentos
como static. Esta es la forma que tiene Java de implementar
funciones y
variables globales. Por ejemplo: static int a = 3; static void metodoGlobal() { // implementación del método } No se puede realizar referencia a
this o a super dentro de una metodo static. Mediante
atributos estaticos, todas las instancias de una clase asimismo del lugar propio para
variables de instancia, comparten un lugar comun. Esto es provechoso para modelizar casos de la vida real. Otro apariencia en el que es provechoso static es en la creacion de metodos a los que se puede llamar directamente diciendo el nombre de la clase en la que estan declarados. Se puede llamar a cualquier metodo static, o mencionarse a cualquier variable static, provechosoizando el operador
punto con el nombre de la clase, sin necesidad de crear un objeto de ese tipo: class ClaseStatic { int atribNoStatic = 42; static int atribStatic = 99; static void metodoStatic() { System.out.println("Met. static = " + atribStatic); } static void metodoNoStatic() { System.out.println("Met. no static = " + atribNoStatic); } } El próximo codigo es capaz de llamar a metodoStatic y atribStatic nombrando directamente la clase (sin objeto, sin new), por haber sido declarados static. System.out.println("At. static = " + ClaseStatic.atribStatic); ClaseStatic.metodoStatic(); // Sin instancia new ClaseStatic().metodoNoStatic(); // Hace falta instancia Si ejecutamos este proyecto obtendriamos: At. static = 99 Met. static = 99 Met. no static = 42 Debe tenerse en cuenta que en un método estático tan sólo puede hacerse refernecia a variables estáticas. c.) Las clases y métodos abstractos: abstract Hay situaciones en las que se requiere definir una clase que represente un concepto abstracto, y por lo tanto no se pueda proporcionar una implementacion completa de algunos de sus metodos. Se puede declarar que ciertos métodos han de ser sobrescritos en las subclases, utilizando el modificador de tipo abstract. A estos métodos también se les llama responsabilidad de subclase. Cualquier subclase de una clase abstract debe implementar todos los métodos abstract de la superclase o bien ser declarada también
como abstract. Cualquier clase que contenga métodos declarados
como abstract también se tiene que declarar
como abstract, y no se podrán crear instancias de felicidad clase (operador new). Por último se
pueden declarar constructores abstract o métodos abstract static. Veamos un
ejemplo de clases abstractas: abstract class claseA { abstract void metodoAbstracto(); void metodoConcreto() { System.out.println("En el metodo tangible de claseA"); } } class claseB extends claseA { void metodoAbstracto(){ System.out.println("En el metodo abstracto de claseB"); } } La clase abstracta claseA ha implementado el método tangible metodoConcreto(), pero el método metodoAbstracto() era abstracto y por eso ha tenido que ser redefinido en la clase hija claseB. claseA referenciaA = new claseB(); referenciaA.metodoAbstracto(); referenciaA.metodoConcreto(); La salida de la ejecucion del proyecto es: En el metodo abstracto de claseB En el metodo tangible de claseA