> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java Method Overriding

jini:) 2023. 10. 26. 09:22
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Object Oriented Programming > Java Method Overriding
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

 

하위 클래스가 상위 클래스에서 상속할 때 해당 메서드도 상속합니다. 그러나 슈퍼클래스 메서드를 재정의할 수도 있습니다(새 메서드를 선언하고 구현함). 다음 스포츠 class를 고려하십시오.

class Sports{
    String getName(){
        return "Generic Sports";
    }
    void getNumberOfTeamMembers(){
        System.out.println( "Each team has n players in " + getName() );
    }
}

다음으로 Sports 클래스에서 상속되는 Soccer 클래스를 만듭니다. getName 메서드를 재정의하고 다른 하위 클래스별 문자열을 반환할 수 있습니다.

class Soccer extends Sports{
    @Override
    String getName(){
        return "Soccer Class";
    }
}

 

Note : 메서드를 재정의할 때 @Override 주석을 앞에 두어야 합니다. 재정의된 메서드의 매개변수 및 리턴 유형은 상위 유형에서 상속된 메서드의 것과 정확히 동일해야 합니다.

 

Task

슈퍼클래스의 getNumberOfTeamMembers 메서드와 동일한 명령문을 출력하는 재정의된 getNumberOfTeamMembers 메서드를 작성하여 편집기에서 코드를 완성합니다. 단, (축구팀의 선수 수)로 대체합니다.

 

 

Output Format

실행되면 완성된 코드는 다음을 출력해야 합니다.

Generic Sports
Each team has n players in Generic Sports
Soccer Class
Each team has 11 players in Soccer Class

 

Code

import java.util.*;
class Sports{

    String getName(){
        return "Generic Sports";
    }
  
    void getNumberOfTeamMembers(){
        System.out.println( "Each team has n players in " + getName() );
    }
}

class Soccer extends Sports{
    @Override
    String getName(){
        return "Soccer Class";
    }

    // Write your overridden getNumberOfTeamMembers method here
    @Override
    void getNumberOfTeamMembers(){
        System.out.println( "Each team has 11 players in " + getName() );
    }
}

public class Solution{
	
    public static void main(String []args){
        Sports c1 = new Sports();
        Soccer c2 = new Soccer();
        System.out.println(c1.getName());
        c1.getNumberOfTeamMembers();
        System.out.println(c2.getName());
        c2.getNumberOfTeamMembers();
	}
}

 

 

오버라이딩 (Overriding)
  • 객체 지향 프로그래밍에서 상속 관계에 있는 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 개념.
  • 다형성(Polymorphism)의 핵심 요소 중 하나.
  • 다양한 클래스의 객체가 동일한 메서드 호출로 다르게 동작할 수 있도록 함.
  • 코드 재사용성 향상.
  • 부모 클래스와 자식 클래스 간의 유연한 상호 작용 가능.

오버라이딩 특징
1. 메서드 시그니처 : 오버라이딩을 하려면 자식 클래스에서 부모 클래스의 메서드와 동일한 이름, 매개변수 목록(메서드 시그니처)을 가져야 한다. 메서드 이름과 매개변수 목록이 동일하지 않으면 오버라이딩이 아니라 메서드 오버로딩이 된다.
2. @Override 어노테이션 : 자바 5 이상 버전에서는 @Override 어노테이션을 사용하여 컴파일러에게 오버라이딩을 의도하고 있는 메서드임을 알려 줄 수 있다. 어노테이션을 사용하면 실수로 오버라이딩을 잘못한 경우 컴파일러가 오류를 발생시켜 준다.
3. 상속 관계 : 오버라이딩은 부모 클래스와 자식 클래스 간의 상속 관계에서 발생한다. 즉, 자식 클래스가 부모 클래스를 확장(상속)하고 있는 경우에만 오버라이딩을 사용할 수 있다.
4. 메서드 재정의 : 자식 클래스에서 오버라이딩된 메서드는 부모 클래스의 동일한 메서드 시그니처를 가지면서 다르게 구현된다. 즉, 자식 클래스에서 메서드의 내용을 재정의하여 자식 클래스의 요구에 맞게 동작하도록 할 수 있다.
5. 동적 바인딩 : 오버라이딩된 메서드는 런타임 시 동적 바인딩에 의해 호출된다. 따라서 객체의 실제 타입에 따라 적절한 오버라이딩된 메서드가 실행된다.

 

 

개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.

 

 

 

728x90
반응형