해커랭크 - https://www.hackerrank.com/
Prepare > Java > Advanced > Covariant Return Types
Java는 공변 반환 유형을 허용합니다. 즉, 지정된 반환 유형의 하위 클래스를 반환하는 한 반환 유형을 변경할 수 있습니다.
메서드 재정의를 사용하면 하위 클래스가 기존 슈퍼클래스 메서드의 동작을 재정의하고 원래 반환 유형의 일부 하위 클래스인 반환 유형을 지정할 수 있습니다. 슈퍼클래스 메서드를 재정의할 때 @Override Annotations을 사용하는 것이 가장 좋습니다.
아래 다이어그램에 자세히 설명된 클래스와 메서드를 구현합니다.
메인 메소드가 주의 이름(예: WestBengal 또는 AndhraPradesh)을 사용하고 사용자가 작성한 클래스 및 메소드를 사용하여 해당 주의 국화를 인쇄하는 편집기에서 부분적으로 완료된 코드가 제공됩니다.
Note : 클래스 선언에서 액세스 한정자를 사용하지 마십시오.
Resources
Input Format
잠긴 코드는 State의 하위 클래스(예: WestBengal, Karnataka 또는 AndhraPradesh)의 이름을 나타내는 단일 문자열을 읽은 다음 해당 하위 클래스와 연결된 메서드를 테스트합니다. stdin에서 입력을 읽을 책임은 없습니다.
Output Format
출력은 입력 문자열의 클래스 이름에 해당하는 개체를 만든 다음 해당 클래스의 국화의 whatsYourName 메서드에서 반환된 이름을 인쇄하는 잠긴 코드에 의해 처리됩니다. 당신은 stdout에 아무것도 인쇄할 책임이 없습니다.
Sample Input
AndhraPradesh
Sample Output
Lily
Explanation
AndhraPradesh 개체의 yourNationalFlower 메서드는 Lily 클래스의 인스턴스를 반환하고 Lily 클래스의 whatsYourName 메서드는 숨겨진 코드 검사기에 의해 인쇄된 Lily를 반환합니다.
Code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//Complete the classes below
class Flower {
String whatsYourName() {
return "I have many names and types.";
}
}
class Jasmine extends Flower {
@Override
String whatsYourName() {
return "Jasmine";
}
}
class Lily extends Flower {
@Override
String whatsYourName() {
return "Lily";
}
}
class Region {
Flower yourNationalFlower() {
return new Flower();
}
}
class WestBengal extends Region {
@Override
Flower yourNationalFlower() {
return new Jasmine();
}
}
class AndhraPradesh extends Region {
@Override
Flower yourNationalFlower() {
return new Lily();
}
}
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s = reader.readLine().trim();
Region region = null;
switch (s) {
case "WestBengal":
region = new WestBengal();
break;
case "AndhraPradesh":
region = new AndhraPradesh();
break;
}
Flower flower = region.yourNationalFlower();
System.out.println(flower.whatsYourName());
}
}
상속 (Inheritance)
클래스들 간에 부모-자식 관계를 정의.
자식 클래스는 부모 클래스의 특성과 행동을 물려받을 수 있음.
중복 코드를 줄이고 코드의 재사용성을 높임.
자식 클래스는 부모 클래스의 필드, 메서드를 직접적으로 사용할 수 있고, 추가적인 필드나 메서드를 정의하여 확장할 수 있음.
메서드 오버라이딩 (Method Overriding)
자식 클래스에서 부모 클래스의 메서드를 재정의.
부모 클래스의 메서드 시그니처(이름, 매개변수, 반환유형)를 그대로 가져가면서 자식 클래스에서 해당 메서드의 내용을 재정의 할 수 있음.
다형성을 활용할 수 있는 중요한 방법.
다형성 (Polymorphism)
부모 클래스 타입으로 자식 클래스의 객체를 잠조 할 수 있어서 하나의 변수로 여러 타입의 객체를 다를 수 있음.
코드의 유연성을 높여주고 확장성을 높임.
개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.
'> 개발-IT-인터넷 > > JAVA' 카테고리의 다른 글
[해커랭크(HackerRank) JAVA 풀이] - Java MD5 (1) | 2023.12.21 |
---|---|
[해커랭크(HackerRank) JAVA 풀이] - Java Lambda Expressions (1) | 2023.12.19 |
[해커랭크(HackerRank) JAVA 풀이] - Java Annotations (1) | 2023.12.01 |
[해커랭크(HackerRank) JAVA 풀이] - Java Visitor Pattern (0) | 2023.11.29 |
[해커랭크(HackerRank) JAVA 풀이] - Java Singleton Pattern (0) | 2023.11.24 |