Latest web development tutorials

reescritura de Java (Ignorar) y sobrecarga (sobrecarga)

Reescritura (Ignorar)

Reescritura es una subclase del proceso de implementación para permitir el acceso a los métodos de la clase padre para volver a escribir! Los valores de retorno y parámetros no se cambian. Ese es el mismo caso, el núcleo reescribir!

Reescribiendo ventaja de subclases, según sea necesario, definir específico en sus acciones.

Esa es una subclase de un método de la clase padre puede realizarse según sea necesario.

En principios orientados a objetos, la reescritura significa que se puede reemplazar cualquiera de los métodos existentes. Ejemplos son los siguientes:

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      System.out.println("狗可以跑和走");
   }
}

public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象

      a.move();// 执行 Animal 类的方法

      b.move();//执行 Dog 类的方法
   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

动物可以移动
狗可以跑和走

En el ejemplo anterior se puede ver, a pesar de que b pertenece a los tipos de animales, pero es una clase de método Dog operación de movimiento.

Esto se debe a que en tiempo de compilación, pero la comprobación de parámetro de tipo de referencia.

Sin embargo, en tiempo de ejecución, el tipo de la máquina virtual de Java (JVM) del objeto y el método de funcionamiento del objeto especificado.

Así, en el ejemplo anterior, el compilador ha sido capaz de tener éxito debido a que el método move existe la clase de animal, pero correr, correr es un método para un objeto en particular.

Considere los siguientes ejemplos:

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      System.out.println("狗可以跑和走");
   }
   public void bark(){
      System.out.println("狗可以吠叫");
   }
}

public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象

      a.move();// 执行 Animal 类的方法
      b.move();//执行 Dog 类的方法
      b.bark();
   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

TestDog.java:30: cannot find symbol
symbol  : method bark()
location: class Animal
                b.bark();
                 ^

El programa lanzará un error de compilación porque no existe un método corteza Tipo de animal b referencia.


El método de reglas de reescritura

  • Lista de parámetros debe ser exactamente el mismo que el método para volver a escribir;
  • El tipo de retorno debe ser reescrito por completo con el tipo de retorno del método es el mismo;
  • El acceso no es inferior a los métodos de acceso de la clase padre anulados. Por ejemplo: Si una clase padre se declara público, entonces reemplazar este método en una subclase no puede ser declarada como protegida.
  • Los miembros de la clase padre sólo pueden ser anulados sus subclases.
  • Declarado como métodos finales no se pueden sustituir.
  • Declarados como métodos estáticos no pueden ser reescritos, pero se pueden declarar de nuevo.
  • La clase y subclase de los padres en el mismo paquete, la subclase pueden anular la clase padre de todos los métodos, que no sean declaraciones de enfoque privado y final.
  • Subclase y superclase no es el mismo paquete, por lo que sólo las subclases pueden invalidar la declaración de métodos no-finales de la clase padre pública y protegida para.
  • método reemplazado puede lanzar cualquier excepción no obligatoria, independientemente de si el método se ha reescrito una excepción. Sin embargo, el método no puede omitir la excepción obligatoria lanzar nuevo o más amplio de la declaración obligatoria es una excepción método reemplazado, en caso contrario se puede.
  • Constructor no puede ser reescrito.
  • Si un método no puede ser heredada, no puede reemplazar este método.

Uso de la palabra clave super

Cuando tenga que ser reescritos para llamar al método de la clase padre en una subclase, al utilizar la palabra clave super.

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      super.move(); // 应用super类的方法
      System.out.println("狗可以跑和走");
   }
}

public class TestDog{

   public static void main(String args[]){

      Animal b = new Dog(); // Dog 对象
      b.move(); //执行 Dog类的方法

   }
}

Los ejemplos anteriores resultados compilados son los siguientes:

动物可以移动
狗可以跑和走

Sobrecarga (sobrecarga)

Sobrecarga (sobrecarga) pertenece a una clase dentro del método del mismo nombre, pero con diferentes parámetros. El tipo de retorno puede ser el mismo o diferente.

Cada método sobrecargado (o constructor) deben tener una lista única de tipos de argumentos.

Sólo constructores sobrecargados

La sobrecarga de reglas

  • método sobrecargado debe cambiar la lista de parámetros;
  • Los métodos sobrecargados pueden cambiar el tipo de retorno;
  • Los métodos sobrecargados pueden cambiar modificadores de acceso;
  • Los métodos sobrecargados se puede declarar una nueva excepciones o controladas más amplio;
  • El método puede estar en la misma clase o estar sobrecargado en una subclase.

Ejemplos

public class Overloading {
 
	public int test(){
		System.out.println("test1");
		return 1;
	}
 
	public void test(int a){
		System.out.println("test2");
	}	
 
	//以下两个参数类型顺序不同
	public String test(int a,String s){
		System.out.println("test3");
		return "returntest3";
	}	
 
	public String test(String s,int a){
		System.out.println("test4");
		return "returntest4";
	}	
 
	public static void main(String[] args){
		Overloading o = new Overloading();
		System.out.println(o.test());
		o.test(1);
		System.out.println(o.test(1,"test3"));
		System.out.println(o.test("test4",1));
	}
}

Reescribiendo la diferencia entre la sobrecarga

Punto de diferencia Los métodos sobrecargados Sustitución de métodos
Lista de parámetros Usted debe ser modificado No debe ser modificado
Tipo de retorno Puede modificar No debe ser modificado
anormal Puede modificar Puede ser reducido o eliminado, no debe lanzar excepciones de nuevos o más amplios
acceso Puede modificar No debe haber restricciones más estrictas (límite puede ser reducido)