2017-11-24 1 views
0

나는 친구들과 게임을하고있다. 메서드의 반환 값을 같은 클래스의 다른 메서드로 호출하려고합니다. 나는 정상적인 상황에서 이것을하는 법을 알고 있지만, 내가 사용하고있는 수업은 추상적이다. 나는 인터넷을 통해 해답을 찾았지만 아무 것도 발견하지 못했다. 이것은 내가 사용하고있는 약간의 코드입니다 :추상 클래스 내에서 메소드를 호출하는 방법

public abstract class Game implements ActionListener 
{ 
    public static char KBoard(char w, char a, char s, char d) //This method takes in a keyboard command from the user, and returns that char. 
{ 
     Scanner scan = new Scanner(System.in); 
     System.out.print(""); 
     char kBoard = scan.next().charAt(0); 
     return kBoard; 
    } 

    public static int MoveX (int velocity) 
{ 
     velocity = 5;//character moves this distance when a control key is pressed 

     Game kBoard = new Game();//These lines here will 
     kboard.KBoard();//call the KBoard method from above and the char it returns^^ 
     Switch(); 
     { 
     Case w: 
     characterPosX -= velocity;//if the w key is pressed, character moves up 
     break; 

     Case s: 
     characterPosX += velocity;//if the s key is pressed, character moves down 
     break; 
    } 
    return characterPosX;//returns the new X position for the game character 
    } 
} 
+0

가능한 복제 (https://stackoverflow.com/questions/27279341/calling-non-abstract-method-in-abstract-class을 -java) – Debabrata

+2

코드를 게시 할 때 의사 코드가 아닌 실제 코드를 게시하십시오. 게시 한 코드에는 컴파일 할 필요가없는 다양한 실수가 있습니다. 실제 문제와 관련이없는 사소한 실수입니다. 또한 코드를 게시했지만 사용자가 원하는 것과 비교되는 내용에 대해서는 언급하지 않았습니다. 또한 Java 명명 규칙을 따르기를 강력히 권장합니다. –

답변

1

추상 클래스는 직접적으로 사용될 수 없습니다. 그것을 사용하려면 실제 전문화 된 수업이 필요합니다. 당신의 방법은 정적 그런 다음, 대신 전문 클래스의 인스턴스를 사용하는, 당신은 다음과 같이 기본 클래스의 이름을 사용 : 정적 메서드는 항상 사용할 수 있습니다로

int x = SpecializedClassName.MoveX(1); 

, 어디서든 일어날 수있는 그 .

또는 양자 택일로, 당신은 단순히 당신은 abstract classinstance을 만들 수 없습니다

int x = Game.MoveX(1); 
+0

비록 int가 아닌 char 일 필요가 있습니다. 내가 그걸 어떻게 하겠니? – Devon

+0

char를 반환하려면 MoveX()가 필요합니까? – imerso

2

사용할 수 있습니다 당신은 static 메소드를 호출 create 개체를 필요가 없습니다. 대신 [추상 클래스 자바에서 호출이 아닌 추상적 인 방법]의 다음과 같은 -

Game.KBoard(); 
관련 문제