Java의 다형성: 메서드를 오버로드하거나 재정의하는 방법

Java의 다형성: 메서드를 오버로드하거나 재정의하는 방법

메소드 오버로딩과 오버라이드는 Java가 다형성을 보여주는 두 가지 방법입니다. 다형성(Polymorphism)은 다수를 의미하는 '폴리(poly)'와 형태를 의미하는 '모프(morph)'의 두 그리스어 단어의 조합에서 비롯됩니다. 따라서 다형성을 통해 메서드는 다양한 형태를 취할 수 있습니다.





Java에서 메서드를 오버로드하거나 재정의하는 방법을 배우려면 이 가이드를 따르십시오.





메소드 오버로딩이란?

'메서드 오버로딩'은 같은 이름의 클래스에 서로 다른 메서드를 정의하는 것을 말합니다. 메서드에는 서로 다른 서명이 있어야 합니다. 메소드 서명은 메소드 이름과 매개변수 목록의 조합입니다. 반환 유형은 포함하지 않습니다.





컴파일러는 유형, 매개변수 수 및 배치 순서를 확인하여 사용할 메소드를 알고 있습니다.

관련된: Java 프로그래밍 언어의 상속 탐색



메서드 오버로딩은 컴파일 타임 다형성을 보여줍니다. 컴파일 시간 다형성은 Java 컴파일러가 런타임에 개체를 기능에 바인딩함을 의미합니다. 컴파일러는 이를 달성하기 위해 메서드 서명을 확인합니다.

이러한 유형의 다형성은 정적 또는 초기 바인딩이라고도 합니다.





아래의 메서드 오버로딩 예제를 참조하세요.

class Arithmetic{
int cube(int x){
return x*x*x;
}
double cube(double x){
return x*x*x;
}
float cube(float x){
return x*x*x;
}
public static void main(String[] args){
Arithmetic myMultiplication = new Arithmetic();
System.out.println('The cube of 5 is ' + myMultiplication.cube(5));
System.out.println('The cube of 5.0 is ' + myMultiplication.cube(5.0));
System.out.println('The cube of 0.5 is ' + myMultiplication.cube(0.5));
}
}

산출:





The cube of 5 is 125
The cube of 5.0 is 125.0
The cube of 0.5 is 0.125

위의 코드는 다양한 유형의 큐브를 얻는 방법을 보여줍니다( 정수 , 더블 , 뜨다 ) 같은 방법을 사용합니다.

일반적으로 메서드 오버로딩은 매개변수 유형이 다른 유사한 메서드를 정의하는 데 사용됩니다.

메서드 재정의란 무엇입니까?

이것은 하위 클래스에서 메소드의 다른 구현을 나타냅니다. 메서드는 부모 클래스에 이미 정의되어 있어야 합니다.

재정의하는 메서드(즉, 하위 클래스의 메서드)는 슈퍼 클래스의 메서드 시그니처와 동일한 메서드 시그니처를 가져야 합니다. 재정의하는 메소드의 리턴 유형은 동일하거나 수퍼 클래스의 하위 유형일 수 있습니다.

재정의는 일반적으로 하위 클래스에 개체 동작의 특정 구현을 포함하는 데 사용됩니다.

class Account{
public void message() {
System.out.println('
Thank you for opening an account with us!');
}
public static void main(String args[]) {
Account myAccount = new Account();
Savings mySavings = new Savings();
FixedDeposit myFixedDepo = new FixedDeposit();
myAccount.message();
mySavings.message();
myFixedDepo.message();
}
}
class Savings extends Account {
public void message() {
System.out.println('
Thank you for opening a Savings account with us!');
}
}
class FixedDeposit extends Account {
public void message() {
System.out.println('
Thank you for opening a Fixed Deposit account with us!');
}
}

산출:

Thank you for opening an account with us!
Thank you for opening a Savings account with us!
Thank you for opening a Fixed Deposit account with us!

위의 예는 방법을 보여줍니다 메세지() 하위 클래스에서 재정의됩니다. 저금 그리고 정기 예금 . 예금 계좌가 있는 은행 계좌 소유자와 정기 예금 계좌가 있는 은행 계좌 소유자에 대해 다른 메시지가 표시됩니다.

관련된: Java에서 문자열 사용에 대해 알아야 할 사항

메서드 재정의는 런타임 다형성 또는 동적 메서드 디스패치를 ​​보여줍니다. 즉, 호출할 메서드는 컴파일이 아니라 런타임에 확인됩니다.

메서드가 재정의되지 않도록 하려면 키워드를 사용하십시오. 결정적인 .

final void message (){
System.out.println('
Thank you for opening an account with us!');
}

서브클래스가 이를 재정의하려고 하면 컴파일 오류가 발생합니다.

이상적으로는 생성자 내에서 호출되는 모든 메서드는 다음과 같아야 합니다. 결정적인 . 이는 하위 클래스로 인해 발생할 수 있는 의도하지 않은 변경을 피하기 위한 것입니다.

경우에 따라 재정의 메서드 내에서 재정의된 메서드에 액세스해야 할 수도 있습니다. 키워드를 사용할 수 있습니다 감독자 뒤에 점 연산자( . ) 및 이러한 경우 메서드 이름.

슈퍼클래스를 고려하라 동물 .

class Animal{
public void move() {
System.out.println('
I can move.');
}
}

아래는 하위 클래스입니다. 생선 , 재정의 이동하다() :

class Fish extends Animal {
public void move() {
System.out.println('
I can swim.');
super.move();
}
public static void main(String args[]){
Fish Tilapia = new Fish();
Tilapia.move();
}
}

산출:

사진에서 드레스 찾기
I can swim.
I can move.

메서드를 재정의할 때 사용된 액세스 수정자도 염두에 두어야 합니다. 하위 클래스의 수정자는 기본 클래스와 동일하거나 더 높은 가시성 수준을 가져야 합니다. 예를 들어 기본 클래스의 메서드가 다음과 같이 정의된 경우 보호받는 , 재정의 방법은 다음 중 하나일 수 있습니다. 보호받는 또는 공공의 .

다형성이 있는 간단한 코드

메서드 재정의 및 오버로딩은 코드 단순화에 중요하며 간단한 코드는 좋은 습관입니다.

왜요? Grand Central Station보다 더 많은 기능이 있는 복잡한 코드베이스를 상상해 보십시오. 이제 치명적인 버그가 눈앞에서 당신의 노력을 파괴하기 시작한다고 상상해보십시오. 감염원을 격리하고 신속하게 조치해야 합니다.

행운을 빕니다, 당신은 당신의 코드를 단순화하지 않았습니다 ... 이제 당신은 암호화에 대한 진정한 교훈을 얻으려고합니다. 효과적인 데이터 구조를 사용하고 코드를 줄이기 위해 할 수 있는 일을 하는 것(예: DRY를 염두에 두는 것)은 이와 같은 상황에 대한 최선의 방어입니다.

Java 학습 목록의 다음 단계는 배열로 작업해야 합니다. 데이터 포인트 배치를 저장하는 데 사용되는 중요한 데이터 구조입니다.

공유하다 공유하다 트위터 이메일 Java에서 배열에 대한 작업을 만들고 수행하는 방법

자바를 배우시나요? 어레이가 데이터를 쉽게 처리하도록 하십시오.

다음 읽기
관련 항목
  • 프로그램 작성
  • 자바
  • 코딩 튜토리얼
저자 소개 제롬 데이비슨(22개 기사 게재)

Jerome은 MakeUseOf의 스태프 라이터입니다. 그는 프로그래밍 및 Linux에 대한 기사를 다룹니다. 그는 또한 암호화폐 애호가이며 항상 암호화폐 산업을 주시하고 있습니다.

제롬 데이비슨이 참여한 작품 더보기

뉴스레터 구독

뉴스레터에 가입하여 기술 팁, 리뷰, 무료 전자책 및 독점 거래를 확인하십시오!

구독하려면 여기를 클릭하세요.