최고의 자바 다시 쓰기 (재정) 및 오버로드 (과부하) 튜토리얼 2024년, 이 튜토리얼에서는 다시 쓰기 (재정),룰을 재 기입에있어서,슈퍼 키워드를 사용하여,오버로드 (과부하),오버로드의 차이를 다시 쓰기,를 배울 수 있습니다.
재기록 다시 쓸 상위 클래스의 메소드에 대한 액세스를 허용하도록 구현 프로세스의 하위 클래스이다! 반환 값과 매개 변수가 변경되지 않습니다. 즉,이 같은 경우와, 상기 코어는 재기록!
필요에 따라 서브 클래스의 장점을 다시 쓰기, 자신의 행동에 특정 정의합니다.
즉, 필요에 따라 실현 될 수있는 부모 클래스에있어서의 서브 클래스이다.
객체 지향 원칙에서 재 작성은 기존의 방법을 대체 할 수 있다는 것을 의미한다. 다음 예는 다음과 같다 :
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 类的方法 } }
다음과 같은 결과를 컴파일 위의 예는 다음과 같습니다
动物可以移动 狗可以跑和走
상기 예에서 이는 B는 동물의 종류에 속한다하더라도, 본하지만 이동 조작 방법 개 클래스 수있다.
컴파일 시간에 있지만 기준 유형 파라미터를 확인하기 때문이다.
그러나, 실행시에, 지정된 객체와 객체의 동작 방법의 자바 가상 머신 (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)); } }
차이의 포인트 | 오버로드 방법 | 재정의 방법 |
---|---|---|
매개 변수 목록 | 당신은 수정해야합니다 | 수정해서는 안됩니다 |
반환 형식 | 당신은 수정할 수 있습니다 | 수정해서는 안됩니다 |
이상 | 당신은 수정할 수 있습니다 | 감소 또는 제거 할 수 있습니다, 당신은 신규 또는 광범위한 예외를 throw하지 않아야합니다 |
액세스 | 당신은 수정할 수 있습니다 | 더 엄격한 제한이 아니어야합니다 (제한이 감소 될 수있다) |