2017-03-01 1 views
-2

여기에 제가 가지고있는 코드가 있습니다. 가능하다면 덜 clunky 해지고 싶습니다. Soccer와 Basketball은 Player의 하위 클래스입니다. arr [i] .methodName()은 수퍼 클래스의 메서드에서만 작동하며 가능한 경우 같은 방식으로 호출되도록 하위 클래스의 메서드를 원합니다.개체의 배열을 반복하고 개체의 메서드를 호출하려면 어떻게해야합니까?

import java.util.Arrays; 
    public class PlayerClient { 
     public static void main(String[] args) { 
      Soccer s1 = new Soccer("Robert", 12, 200000, 3, 1, 17); 
      Soccer s2 = new Soccer("Carrot", 7, 400000, 1, 4, 35); 
      Basketball b1 = new Basketball("Jeremy", 37, 300000, 70, 6.3); 
      Basketball b2 = new Basketball("Lebron", 65, 1000000, 130, 9.0); 
      Player[] arr = {s1, s2, b1, b2}; 
      for (int i = 0; i < arr.length; i++) { 
       System.out.println("\n\n" + arr[i].getName()); 
       System.out.println(arr[i].getNumber()); 
       System.out.println(arr[i].getSalary()); 
       if (arr[i].equals(s1)) { 
        System.out.println(s1.getYellowFlags()); 
        System.out.println(s1.getRedFlags()); 
        System.out.println(s1.getGoalsScored() + "\n\n"); 
       } else if (arr[i].equals(s2)) { 
        System.out.println(s2.getYellowFlags()); 
        System.out.println(s2.getRedFlags()); 
        System.out.println(s2.getGoalsScored() + "\n\n"); 
       } else if (arr[i].equals(b1)) { 
        System.out.println(b1.getjumpHeight()); 
        System.out.println(b1.getjumpHeight() + "\n\n"); 
       } else if (arr[i].equals(b2)) { 
        System.out.println(b2.getjumpHeight()); 
        System.out.println(b2.getBasketsScored() + "\n\n"); 
       } 
      } 
     } 
    } 

답변

0

나는 당신을 위해 무엇을 찾고있는 것은 템플릿 메소드 디자인 패턴이라고 생각 :

https://www.tutorialspoint.com/design_pattern/template_pattern.htm

들이 자식 클래스에서 구현되는 시행, 기본 클래스에서 추상 메서드를 정의합니다. 그런 다음 기본 유형에서 메소드를 호출 할 수 있지만 각 하위 클래스마다 다른 구현을 가질 수 있습니다.

import java.util.Arrays; 
public class PlayerClient { 
    public static void main(String[] args) { 
     Soccer s1 = new Soccer("Robert", 12, 200000, 3, 1, 17); 
     Soccer s2 = new Soccer("Carrot", 7, 400000, 1, 4, 35); 
     Basketball b1 = new Basketball("Jeremy", 37, 300000, 70, 6.3); 
     Basketball b2 = new Basketball("Lebron", 65, 1000000, 130, 9.0); 
     Player[] arr = {s1, s2, b1, b2}; 
     for (int i = 0; i < arr.length; i++) { 
      System.out.println("\n\n" + arr[i].getName()); 
      System.out.println(arr[i].getNumber()); 
      System.out.println(arr[i].getSalary()); 
      System.out.println(arr[i].printScore()); 
     } 
    } 
} 


public abstract class Player { 
    abstract void printScore(); 

    // existing code 
} 

public class Soccer extends Player { 
    @Override   
    void printScore() { 
     System.out.println(getYellowFlags()); 
     System.out.println(getRedFlags()); 
     System.out.println(getGoalsScored() + "\n\n"); 
    } 

    // existing methods 
} 

public class Basketball extends Player { 
    @Override   
    void printScore() { 
     System.out.println(getjumpHeight()); 
     System.out.println(getjumpHeight() + "\n\n"); 
    } 

    // existing methods 
} 
관련 문제