Latest web development tutorials

Java переписывание (Override) и перегрузки (перегрузки)

Rewrite (Override)

Переписывание подкласс процесса реализации, чтобы обеспечить доступ к методам родительского класса переписывать! Значения и параметры возврата не изменяются. То есть тот же случай, ядро ​​переписать!

Переписывая преимущество подклассов по мере необходимости, определить конкретные в своих действиях.

То есть подкласс метода родительского класса может быть реализован по мере необходимости.

В объектно-ориентированных принципах, переписывание означает, что вы можете переопределить любые существующие методы. Примерами могут служить следующие:

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

Приведенные выше примеры скомпилированные получены следующие результаты:

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

В приведенном выше примере можно увидеть, даже если б принадлежит к видам животных, но это операция перемещения класса метод собаки.

Это происходит потому, что во время компиляции, но проверка параметра ссылочного типа.

Тем не менее, во время выполнения, тип виртуальной машины Java (JVM) указанного объекта и способа эксплуатации объекта.

Таким образом, в приведенном выше примере, компилятор смог добиться успеха, потому что метод движение существует класс животных, но работает, работает это метод для конкретного объекта.

Рассмотрим следующие примеры:

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

Приведенные выше примеры скомпилированные получены следующие результаты:

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

Программа выдаст ошибку компиляции, потому что нет б эталонный метод коры типа животных.


Метод правил перезаписи

  • Список параметров должен быть точно такой же, как метод, который будет переписан;
  • Тип возвращаемого значения должен быть полностью переписан с типом возвращаемого значения метода является то же самое;
  • Доступ не ниже, чем для регулирования доступа родительского класса подменены методами. Например: Если родительский класс объявляется публично, то переопределить этот метод в подклассе не может быть объявлен как защищенный.
  • Члены родительского класса могут быть перекрыты только его подклассы.
  • Заявленный, как окончательные методы не могут быть переопределены.
  • Заявленный, как статические методы не могут быть переписаны, но может быть объявлен снова.
  • Родительский класс и подкласс в том же пакете, подкласс может переопределить родительский класс всех методов, кроме заявлений частного и окончательного подхода.
  • Подкласс и суперкласс не тот же пакет, так что только подклассы могут переопределить декларацию незаключительного методов родительского класса общественной и защищенной для.
  • Переопределенный метод может бросить любую необязательного исключения, независимо от того, является ли метод был переписан исключение. Однако этот метод не может отменить обязательное исключение бросить новый или шире, чем обязательной декларации переопределяется метод исключения, в противном случае вы можете.
  • Конструктор не может быть переписана.
  • Если метод не может быть унаследован, он не может переопределить этот метод.

Использование Супер ключевое слово

Когда вам нужно переписать, чтобы вызвать метод родительского класса в подклассе, чтобы использовать супер ключевое слово.

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

   }
}

Приведенные выше примеры скомпилированные получены следующие результаты:

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

Перегрузка (от перегрузки)

Перегрузки (перегрузки) находится в классе внутри метода с тем же именем, но с разными параметрами. Тип возврата могут быть одинаковыми или различными.

Каждый перегруженный метод (или конструктор) должен иметь уникальный список типов аргументов.

Только перегруженные конструкторы

Чрезмерная правила

  • Перегруженный метод должен изменить список параметров;
  • Перегруженные методы могут изменить тип возвращаемого значения;
  • Перегруженные методы могут изменить модификаторы доступа;
  • Перегруженные методы могут объявить новый или шире проверенные исключения;
  • Метод может быть в том же классе или быть перегружен в подклассе.

примеров

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

Переписывая разницу между перегрузки

Точка разницы Перегруженные методы Переопределение методов
Список параметров Вы должны быть изменены Не должен быть изменен
Возвращаемый тип Вы можете изменить Не должен быть изменен
ненормальный Вы можете изменить Может быть уменьшено или удалены, вы не должны бросать новые или более широкое исключение
доступа Вы можете изменить Не должны быть более жесткие ограничения (ограничение может быть уменьшена)