Latest web development tutorials

reescrita Java (Override) e sobrecarga (sobrecarga)

Rewrite (Override)

Reescrita é uma subclasse do processo de implementação para permitir o acesso aos métodos da classe pai para re-escrever! valores de retorno e os parâmetros não são alterados. Esse é o mesmo caso, o núcleo reescrever!

Reescrevendo vantagem de subclasses, conforme necessário, definir específico em suas ações.

Que é uma subclasse de um método de classe pai pode ser realizada, conforme necessário.

Em princípios de orientação a objetos, a reescrita significa que você pode substituir quaisquer métodos existentes. Exemplos são os seguintes:

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 类的方法
   }
}

Os exemplos acima são compilados os resultados como se segue:

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

No exemplo acima, pode ser visto, embora b pertence tipos de animais, mas é uma classe método cão operação de movimentação.

Isto é porque no tempo de compilação, mas verificando parâmetro de tipo de referência.

No entanto, em tempo de execução, o tipo de máquina virtual Java (JVM) do objeto e método de operação do objeto especificado.

Assim, no exemplo acima, o compilador tem sido capaz de ter sucesso porque o método movimento existe classe Animal, mas correndo, correndo é um método para um objeto específico.

Considere os seguintes exemplos:

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();
   }
}

Os exemplos acima são compilados os resultados como se segue:

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

O programa irá lançar um erro de compilação porque não existe um método casca tipo de animal b referência.


O método de reescrever as regras

  • Lista de parâmetros deve ser exatamente o mesmo que o método a ser reescrito;
  • O tipo de retorno deve ser totalmente reescrito com o tipo de retorno do método é o mesmo;
  • O acesso não é menor do que os métodos de acesso classe pai substituídas. Por exemplo: Se uma classe pai é declarado público, em seguida, substituir esse método em uma subclasse não pode ser declarado como protegido.
  • Os membros da classe pai só pode ser substituído suas subclasses.
  • Declarados como métodos final não pode ser substituído.
  • Declarados como métodos estáticos não podem ser reescritos, mas pode ser declarado novamente.
  • A classe pai e subclasse no mesmo pacote, a subclasse pode substituir a classe pai de todos os métodos, exceto declarações de abordagem privada e final.
  • Subclasse e superclasse não é o mesmo pacote, portanto, apenas subclasses pode substituir declaração de métodos não-finais da classe pai pública e protegido para.
  • método substituído pode lançar qualquer exceção não-obrigatório, independentemente de se o método foi reescrito lançar uma exceção. No entanto, o método não pode substituir a excepção obrigatória lançar novo ou mais ampla do que a declaração obrigatória é exceção método substituído, caso contrário, você pode.
  • Construtor não pode ser reescrito.
  • Se um método não pode ser herdada, não pode substituir esse método.

Utilizando a chave Super

Quando você precisa ser reescrito para chamar o método da classe pai em uma subclasse, para usar a palavra-chave 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类的方法

   }
}

Os exemplos acima são compilados os resultados como se segue:

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

Overload (sobrecarga)

Sobrecarga (sobrecarga) é uma classe dentro do método do mesmo nome, mas com diferentes parâmetros. O tipo de retorno podem ser iguais ou diferentes.

Cada método sobrecarregado (ou construtor) deve ter uma lista única de tipos de argumento.

construtores Só sobrecarregados

sobrecarga regras

  • método sobrecarregado deve alterar a lista de parâmetros;
  • Métodos sobrecarregados podem mudar o tipo de retorno;
  • Métodos sobrecarregados podem mudar modificadores de acesso;
  • métodos sobrecarregados pode declarar uma exceções novo ou mais ampla verificados;
  • O método pode estar na mesma classe ou ser sobrecarregado em uma subclasse.

Exemplos

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));
	}
}

Reescrevendo a diferença entre a sobrecarga

Ponto de diferença métodos sobrecarregados Substituindo métodos
Lista de Parâmetros Você deve ser modificado não deve ser modificado
Tipo de retorno Você pode modificar não deve ser modificado
anormal Você pode modificar Podem ser reduzidos ou removidos, você não deve lançar nova exceção ou mais ampla
acesso Você pode modificar não deve haver restrições mais rigorosas (limite pode ser reduzido)