允许两个 类 共享变量和方法

Allowing two classes to share variables and methods

所以我正在努力使我的程序更有条理。为此,我有一个包含我的方法的文件,另一个文件有事件侦听器和变量。第二个文件需要使用第一个文件中的方法来更改变量等等。第一个需要正确使用从第二个到 运行 的变量。基本上:

public class Controls extends javax.swing.Jfarme{
   int turns = 0;
   int stuff = btnSet(jButton1);
}

public class GamePlay{
   public int btnSet(javax.swing.JButton btn){
   //do stuff using turn
   turn++;
   }
} 

这有意义吗?怎么让这两个分享?
编辑:我想要两个 类 来让它更有条理。我做了 TicTacToe,然后是 TicTacTwo,现在是 TicTacCube。它只是变得有点混乱(我现在有 243 个 JButtons 需要跟踪)。我只是想将我的方法从正在执行的代码中分离出来,以便更漂亮。

据我所知,有两种有效的方法可以做到这一点:静态或使用对象(java毕竟是一种面向对象的语言)

静态

对此的静态方法实际上意味着所有变量和方法都属于 classes 本身。这需要在控件 class 中的所有变量和 GamePlay class 中的所有方法之前放置关键字 static。然后,这些都将由 ClassName.variableClassName.method() 访问,例如Controls.turnsGamePlay.btnSet(btn)

使用对象

这种方法意味着会创建您的 class 的新 实例 ,每个实例都有自己的实例变量和方法,可以使用 instance_name.variableinstance_name.method()。这将涉及创建 classes 的实例,例如Controls controls_instance = new Controls()GamePlay gameplay_instance = new GamePlay(),然后引用它们的属性,例如controls_instance.turnsgameplay_instance.setBtn(btn)

免责声明:当然,设计应用程序的classes架构的方法有很多种,所以下面只是其中一种(但不是最坏的)方法。

我的印象是你没有采用面向对象的设计和编程的概念。

如果您向其他人描述(游戏?)应用程序,您肯定会使用很多名词和动词。一个经验法则是 classes 由名词组成,methods 由动词组成。我想 "Controls"(尤其是复数形式)和 "GamePlay" 这两个词不会是您描述中最突出的词,所以不要从那里开始。相反,我希望使用 "Player"、"Board" 或 "Figure" 之类的名词,以及 "move"、"collect"、"shoot" 之类的动词或您玩的任何游戏是关于。对于动词,成为方法,你必须决定它们属于哪个class,你主要通过回答句子的主语是谁或什么来做到这一点,例如move() 应该成为 Figure 的方法,因为移动的不是棋盘或玩家,而是棋盘上的图形。

进一步设计 classes 时,请专注于实体的内部工作("business logic"),而不是用户界面 - 用户界面应保持独立 class es.

因此,此类应用程序的良好设计可能 GamePlay class 具有应用程序的顶级工作流程,但 GamePlay 不应该有任何用户界面(javax.swing.*) 个元素。用户界面(可能类似于您的 Controls class)应该仅通过调用它们的一些方法而不是通过读取字段来与 GamePlay 及其同伴通信。

P.S。关于 Whosebug 上的问题:最好将部分真实代码复制到问题中,这样可以避免 Jfarme 而不是 JFrame.

之类的拼写错误

为了让它与您当前的设计一起工作:

  1. 要使用 Controls class 中的 btnset() 函数,请将 GamePlay class 导入 Controls class,然后实例化一个GamePlay class对象来访问它的btnset()函数。 前任。 GamePlay gameplay = new GamePlay(); gameplay.btnset();

  2. 要在GamePlayclass中使用turns变量,将Controlsclass导入GamePlay class,然后实例化一个 Controls class 对象来访问它的 turns 变量。 前任。 Controls controls = new Controls(); controls.turns++;

或者,您可以将方法或变量设为静态,这样您就不需要先实例化一个对象。如果 method/variable 是静态的,您可以调用 GamePlay.btnset();Controls.turns++;