>Java >java지도 시간 >Java 오버로드 및 재정의에 대한 자세한 설명 및 예

Java 오버로드 및 재정의에 대한 자세한 설명 및 예

高洛峰
高洛峰원래의
2017-01-21 16:56:221935검색

많은 학생들이 오버로드와 오버라이드에 대해 혼동하고 있습니다. 개념 지식을 암기하는 것이 아니라 이해하고 암기하는 것이 좋습니다.

java 重载(overload)与重写(override)详解及实例

먼저 정의를 내리세요.

오버로드: 동일한 클래스 또는 상속 관계가 있는 클래스에서 이름 그룹은 동일한 이름을 갖습니다. 다른 매개변수를 사용합니다. 본질은 다양한 방법에 부여된 이름입니다.

재정의: 상속 관계에 있는 두 클래스 사이에서 상위 클래스에 존재하는 메소드를 하위 클래스에서 재정의합니다. 핵심은 동일한 메서드에 대해 서로 다른 구현을 제공하는 것입니다.

먼저 오버로딩의 예를 살펴보겠습니다.

public class OverloadParent{
 
  public String getPerson(String name){
 
    return “personA” + name;
 
  }
 
   
 
  public String getPerson(int age){
 
    return “personB” ;
 
  }
 
   
 
  public String getPerson(String name,int age){
 
    return “personC”;
 
  }
 
   
 
  public void getPerson(String name){
 
    System.out.println(“我是重载的方法吗?”);
 
  }
 
}
public class OverloadChildextends OverloadParent {
 
  public void getPerson(double money){
 
     Sytem.out.println(“我是重载的方法吗”);
 
  }
 
}

참고:

(1) OverloadParent

에는 동일한 이름을 가진 4개의 메소드가 있습니다( 2) 처음 3개 메소드의 매개변수 종류와 개수가 불일치하고, 반환값이 일관되어 오버로딩을 구성한다

(3) 메소드 4와 메소드 1은 반환값만 달라서 구성하지 않는다. 오버로드되고 컴파일러는 이를 전달하지 않습니다.

ps: 반환 값은 메서드 실행의 결과입니다. 메서드를 호출할 때 "xxx 유형의 반환 값으로 메서드를 호출하고 싶습니다"라는 기능이 될 수 없습니다. 메소드 오버로딩.

(4) OverloadParent는 Demo를 상속받아 Demo의 모든 메소드를 갖고 있습니다. 기존 방법으로는 요구 사항을 충족할 수 없다고 느껴서 단순히 과부하가 걸렸습니다.

오버로딩 플래그: 메소드 이름은 동일하지만 반환 값에 관계없이 매개 변수(수 또는 유형)가 다릅니다.

재정의 예제를 살펴보겠습니다.

public class OverrideParent{
 
   public void fly(){
 
     System.out.println(“Ican fly!”);
 
  }
 
}
public class OverrideChild extends OverrideParent{
 
  @override
 
  public void fly(){
 
       System.out.println(“Ican't fly, but I can run!”);
 
  }
public static vid main(String[] args){
 
       OverwriteParent child= new OverwriteChild();
 
       child.fly();
 
  }
 
}

OverrideChild의 기본 메서드가 실행되면 무엇이 출력되나요?

답은: 날 수는 없지만 달릴 수는 있습니다!

보시다시피:

(1) OverrideChild와 OverrideParent 모두 비행 방법이 있습니다

(2) fly의 반환 값과 수식자는 동일하고 메소드 본문만 다릅니다

(3) jdk1에 나타나는 하위 클래스의 fly 메소드 앞에 @overwrite 주석이 있습니다. 5, 클래스 상속의 경우에만 사용하고 인터페이스 구현에는 1.6을 사용할 수 있습니다. 이 주석은 컴파일러 확인에 도움이 되며 생략할 수 있습니다.

커버의 징후: 시자녀 클래스는 같은 메소드를 다르게 구현합니다.

애플리케이션 시나리오

오버로딩: 메소드가 유사한 기능을 가지고 있지만 다른 매개변수를 전달해야 하는 경우.

재정의: 하위 클래스에 고유한 동작이 있고 이를 상위 클래스에서 상속하지만 자체 요구 사항을 충족할 수 없는 경우입니다.

ps: 오버로딩과 덮어쓰기는 둘 다 다형성의 표현입니다. 전자는 컴파일러 다형성이고 후자는 런타임 다형성입니다.

읽어주셔서 감사합니다. 도움이 되기를 바랍니다. 이 사이트를 지원해 주셔서 감사합니다!

자바 오버로드 및 오버라이드에 대한 자세한 설명과 예시는 PHP 중국어 홈페이지를 참고해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.