繁体   English   中英

如何从另一个类访问对象方法?

[英]How can I access an objects methods from another class?

这是标题为“ Main.java”的主类的代码:

import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

import static org.lwjgl.opengl.GL11.*;

public class Main{
    public static void main(String[] args){
        try{
            Display.setDisplayMode(new DisplayMode(640, 480));
            Display.setTitle("LWJGL TESTING");
            Display.create();
        }catch (LWJGLException e){
            e.printStackTrace();
            Display.destroy();
            System.exit(1);
        }

        glMatrixMode(GL_PROJECTION);
        glOrtho(0, 640, 480, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);

        while (!Display.isCloseRequested()){
            glClear(GL_COLOR_BUFFER_BIT);
            new KeyboardEventHandler();
            Line line1 = new Line(100, 100, 200, 200, 1);
            Line line2 = new Line(400, 0, 400, 100, 2);
            Display.update();
            Display.sync(60);
        }
        Display.destroy();
        System.exit(0);
    }
}

这是我的名为“ KeyboardEventHandler.java”的KeyboardEventHandler类的代码:

import org.lwjgl.input.Keyboard;


public class KeyboardEventHandler extends Main{
    public KeyboardEventHandler(){
        if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){

        }
    }
}

这是我的标题为“ Line.java”的类:

import static org.lwjgl.opengl.GL11.*;

import org.lwjgl.opengl.*;
import org.lwjgl.*;
import org.lwjgl.opengl.GL11;

public class Line {
    int id;
    public Line(int startx, int starty, int endx, int endy, int startingid){
        glBegin(GL_LINE_STRIP);
            glVertex2i(startx, starty);
            glVertex2i(endx, endy);
        glEnd();
        id = startingid;
    }
    public int getLineId(){
        return id;
    }
}

我如何从KeyboardEventHandler类访问“ line1”行的getLineId()方法,对于Java来说我还很陌生,所以如果这是一个显而易见的答案,对不起。

您可以将行传递到KeyboardEventHandler构造函数中。

//New KeyboardEventHandler
import org.lwjgl.input.Keyboard;

public class KeyboardEventHandler extends Main{
    public KeyboardEventHandler(Line passedLine /* Passing the Line object*/){
        if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
            int lineID = passedLine.getLineId();
        }
    }
}

然后在你的主班

/*Section from Main class*/
while (!Display.isCloseRequested()){
    glClear(GL_COLOR_BUFFER_BIT);
    Line line1 = new Line(100, 100, 200, 200, 1);
    //Pass line into keyboard event handler\\
    new KeyboardEventHandler(line1);
    Line line2 = new Line(400, 0, 400, 100, 2);
    //Pass line into keyboard event handler\\
    new KeyboardEventHandler(line2);
    Display.update();
    Display.sync(60);
}

要调用该方法,只需使用即可. 表示实例(第1行或第2行)内部的字段或方法(getLineId)。 要将其提供给另一个类,请将您的Line实例之一传递给构造函数。 对于您来说,这将是:

    public class KeyboardEventHandler extends Main{
        public KeyboardEventHandler(Line line){
            if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
                int line1Id = line1.getLineId();
            }
        }
    }

在调用它时,只需执行new KeyboardEventHandler(myLine);

这种代码结构也存在一些问题,我什至看不到在那里使用另一个类只做一件小事的意义。

另外,如果您不知道这些,建议您在进入此处之前先阅读更多内容。 该站点用于询问已经研究过的问题,但未找到解决方案。 显然,这根本没有被研究过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM