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

Java 允许两个类共享变量和方法,java,oop,organization,Java,Oop,Organization,所以我正努力使我的计划更有条理。要做到这一点,我有一个包含我的方法的文件,另一个有事件监听器和变量。第二个文件需要使用第一个文件中的方法来更改变量等等。第一个需要使用第二个的变量才能正常运行。基本上: public class Controls extends javax.swing.Jfarme{ int turns = 0; int stuff = btnSet(jButton1); } public class GamePlay{ public int btnSet(j

所以我正努力使我的计划更有条理。要做到这一点,我有一个包含我的方法的文件,另一个有事件监听器和变量。第二个文件需要使用第一个文件中的方法来更改变量等等。第一个需要使用第二个的变量才能正常运行。基本上:

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++;
   }
} 
这有意义吗?我怎样才能让这两个人分享?

编辑:我想要两节课,让它更有条理。我做了Tictatcoe,然后是Tictatcwo,现在是Tictacube。它只是变得有点混乱(我现在有243个jbutton要跟踪)。我只想将我的方法从正在执行的代码中分离出来,使之变得漂亮

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

静态地 对此的静态方法实际上意味着所有变量和方法都属于类本身。这需要将关键字
static
放在Controls类中的所有变量和GamePlay类中的所有方法之前。所有这些都可以通过
ClassName.variable
ClassName.method()
来访问,例如
控件.旋转
游戏性.btnSet(btn)

使用对象 这种方法意味着创建类的新实例,每个实例都包含自己的实例变量和方法,可以使用
instance\u name.variable
instance\u name.method()
访问它们。这将涉及到创建类的实例,例如
控件实例=新控件()
游戏性GamePlay\u实例=新游戏性()
,然后引用它们的属性,例如
控件实例.turns
游戏性实例.setBtn
免责声明:当然,设计应用程序的类体系结构有很多种方法,因此下面的方法只是其中一种(但不是最坏的)

我的印象是,您还没有采用面向对象设计和编程的概念

如果你向其他人描述(游戏?)应用程序,你肯定会用到很多名词和动词。经验法则是用名词造出类,用动词造出方法。我猜“控制”(尤其是复数)和“游戏性”这两个词在你的描述中不会是最突出的,所以不要从这里开始。相反,我希望看到像“玩家”、“棋盘”或“人物”这样的名词,以及像“移动”、“收集”、“射击”之类的动词,或者你的游戏是关于什么的。对于动词,成为方法,你必须决定它们属于哪一类,你主要通过回答谁或句子的主语是什么来做到这一点,因此例如
move()
应该成为
Figure
的方法,因为移动的不是棋盘或玩家,而是棋盘上的人物

在进一步设计类时,应将重点放在实体的内部工作方式(“业务逻辑”),而不是用户界面上,这应该放在不同的类中

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

关于StackOverflow的问题:最好将真实代码的一部分复制到问题中,这样您就可以避免像
Jfarme
这样的打字错误,而不是
JFrame

,这样它才能与您当前的设计配合使用:
  • 要使用
    Controls
    类中的
    btnset()
    函数,请将
    GamePlay
    类导入
    Controls
    类,然后实例化
    GamePlay
    类对象以访问其
    btnset()
    函数。 例如,
    GamePlay GamePlay=newgameplay()
    
    gameplay.btnset()

  • 要在
    GamePlay
    类中使用
    turns
    变量,请将
    Controls
    类导入
    GamePlay
    类,然后实例化
    Controls
    类对象以访问其
    turns
    变量。 前任。
    Controls=新控件()
    
    controls.turns++


  • 或者,可以将方法或变量设置为静态,这样就不需要首先实例化对象。如果方法/变量是静态的,您可以调用
    GamePlay.btnset()
    控件

    为什么首先需要两个类?类应该包含所有需要运行的变量和方法。如果您创建的两个类都需要共享方法,它们可能应该扩展具有这些方法的超类。请描述这两个类之间的关系。
    游戏性
    控件
    意味着什么,反之亦然?仅供参考-如果你不理解所提出的问题,你可以对问题发表评论,要求澄清。@Makoto谢谢,我以后回答问题时会记住这一点:)我完全知道我还在学习,但是命名的基本概念和类似的东西对我来说并不难,我只是在一分钟内把这篇小文章拼凑起来,因为我还没有真正编写任何代码。在这种情况下,btnSet需要使用JBtn来设置文本。啊,是的,这应该可以工作,我忘了这是一件事。我试试看。