Latest web development tutorials

przepisanie Java (Zastąp) i przeciążeniu (Overload)

Przepisz (Zastąp)

Przepisywanie jest podklasą procesie wdrażania, aby umożliwić dostęp do metod klasy nadrzędnej do ponownego zapisu! Zwracane wartości i parametry nie są zmieniane. To jest ten sam przypadek, rdzeń przepisać!

Przepisanie przewagę podklasy jak trzeba, zdefiniuj w swoich działaniach.

To jest podklasą metody klasy rodzic może być realizowane w miarę potrzeb.

W zasadach obiektowych, Ponowny zapis oznacza, że ​​można zastąpić wszystkie istniejące metody. Przykłady są następujące:

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

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

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

W powyższym przykładzie można zauważyć, chociaż b należy do rodzaju zwierzęcia, lecz jest to operacja przenoszenia klasy Metoda psów.

To dlatego, że w czasie kompilacji, ale sprawdzanie parametr typu odniesienia.

Jednak w czasie wykonywania, typ Java Virtual Machine (JVM) dla określonego obiektu i sposobu funkcjonowania obiektu.

Tak więc w powyższym przykładzie, kompilator był w stanie odnieść sukces, ponieważ metoda klasy istnieje ruch zwierząt, ale działa, działa to metoda dla danego obiektu.

Rozważmy następujące przykłady:

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

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

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

Program wygeneruje błąd kompilacji, ponieważ nie ma odniesienia b Metoda bark typu zwierząt.


Sposób poprawiania przepisów

  • Lista parametrów musi być dokładnie taka sama jak metoda być zapisane;
  • Typ zwracany musi być całkowicie przepisany z typem zwracanej metoda jest taka sama;
  • Dostęp nie jest niższa niż klasa dominująca Dostęp nadpisana metod. Na przykład: Jeśli klasa dominująca jest zadeklarowana publiczna, a następnie przesłonić tej metody w podklasie nie może zostać uznane za chronione.
  • Członkowie klasy nadrzędnej może być zmienione tylko jej podklas.
  • Zadeklarowane jako metody końcowe nie mogą być nadpisane.
  • Zadeklarowane jako metody statyczne nie mogą być zapisane, ale może zostać ponownie uznany.
  • Klasa dominująca i podklasy w tym samym opakowaniu, podklasa może nadpisać klasy przodka wszystkich metod, innych niż oświadczenia prywatnego i podejścia końcowego.
  • Podklasa i nadklasą nie jest taki sam pakiet, więc tylko podklasy mogą zastąpić stwierdzenie braku ostatecznych metod klasy nadrzędnej publicznej i chronione przez.
  • zastąpiona metoda może rzucać żadnych nieobowiązkowych wyjątku, niezależnie od tego, czy metoda została przepisana wyjątek. Jednak metoda ta nie może zastąpić obowiązkowego wyjątku rzucić nowe lub szersze niż obowiązkowa deklaracja jest zastąpiona metoda wyjątku, w przeciwnym razie możesz.
  • Konstruktor nie może być przepisany.
  • Jeśli metoda ta nie może być dziedziczona, to nie może zastąpić tę metodę.

Użycie słowa kluczowego Super

Kiedy trzeba być przepisany wywołać metodę klasy nadrzędnej w podklasie użyć słowa kluczowego 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类的方法

   }
}

Powyższe przykłady zebrane wyniki przedstawiają się następująco:

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

Przeciążenie (Overload)

Przeciążeniowe (przeciążenia) jest klasą wewnątrz metody o tej samej nazwie, lecz z zastosowaniem różnych parametrów. Typ zwracany mogą być takie same lub różne.

Każdy przeciążona metoda (lub konstruktora) musi mieć unikalną listę typów argumentów.

Tylko przeciążone konstruktory

Przeciążenie zasady

  • Przeciążona metoda musi zmienić listę parametrów;
  • Przeciążone metody można zmienić rodzaj powrotu;
  • Przeciążone metody mogą zmienić modyfikatory dostępu;
  • Przeciążone metody mogą zadeklarować nowe lub szersze sprawdzonych wyjątków;
  • Sposób ten może być w tym samym przedziale lub przeciążenie w podklasie.

Przykłady

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

Przepisanie różnicę między przeciążeniem

Punkt różnicy Przeciążone metody metody nadrzędne
Lista parametrów Musisz być modyfikowany nie mogą być modyfikowane
Powrót Rodzaj Można modyfikować nie mogą być modyfikowane
nienormalny Można modyfikować Mogą być zmniejszone lub usunięte, nie należy rzucać nowe lub szerszy wyjątek
dostęp Można modyfikować nie mogą być bardziej rygorystyczne ograniczenia (ograniczenie może być zmniejszona)