Polimorfismo y la herencia en Java con métodos estáticos de la clase abstracta

user1107888:

Iba a través de las preguntas de la muestra de Java 8 programador I examen en la página web de Oracle y me encontré con la siguiente pregunta:

abstract class Writer {
  public static  void write() {
    System.out.println("Writing...");
  }
 }
class Author extends Writer {
public static void write() {
       System.out.println("Writing book");
    }
 }
class Programmer extends Writer {
   public static void write() {
     System.out.println("Writing code");
   }
public static void main(String[] args) {
  Writer w = new Author();
   w.write();//What would be the ouput here?
    }
 }

La respuesta correcta es que el método de la clase abstracta se llama.

Ahora, mi entendimiento es que en el polimorfismo, si una variable de clase de tipo matriz contiene una referencia a un objeto de subclase, a continuación, se llama el método de la subclase.

Por lo tanto, estoy correcto entendimiento de que en caso de una función estática, el método de la de la clase cuya variable contiene se llama el refrence?

GhostCat saludos Monica C.:

No hay polimorfismo para métodos estáticos.

El compilador decide en tiempo de compilación, que va a ser invocada método.

Se ve que w es un escritor, y lo hace, ni sabe ni le importa que la instancia real será de esa clase específica sub en tiempo de ejecución. El compilador podía saberlo a veces, pero Java toma el camino fácil aquí.

Esa es una de las razones por las que está realmente cuidado al usar los métodos estáticos en código de producción del mundo real: hacerlo significa sacrificar uno de los elementos esenciales de la programación orientada a objetos.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=204144&siteId=1
Recomendado
Clasificación