java - 这些访问Java中其他类的方法有什么区别?
问题描述
目前我正在进入 Java 开发,我正在努力理解实例的概念和这种性质的事物。当我有一个变量或方法需要在另一个类中访问时,目前我做
public class Class1 implements Listener {
private final Main main;
private final Class2 class2;
public Class1(Main main, Class2 class2) {
this.main= main;
this.class2 = class2;
}
我应该提到我正在尝试开发一个 minecraft 插件,所以一个 Listener 类必须实现 Listener。但是,当我尝试为需要引用 2 个类的类注册事件(同样是 minecraft 的另一件事)时,代码会变得混乱。例如,一个类要获取一个引用其他 2 个类的类,eventRegister 可以如下所示:(在主类中)
pm.registerEvents(new ClassX(this, new ClassY(this, new ClassZ(this))), this);
(注册事件需要一个监听器和一个主类)
我的问题是:这种获取另一个类的方法和简单地扩展它有什么区别。它有区别吗?
解决方案
当您将一个实例传递给另一个实例时(在您的情况下通过构造函数),您正在应用对象组合,这类似于说“我将把这个特定的引擎放入这辆特定的汽车”。您可能希望将不同的引擎放入不同的汽车中,因此您将传递不同的引擎作为构造函数。
implements
称为继承。_ 继承背后的想法是知道所有的类都是同一种。例如,您可能会说“所有汽车都可以 turnLeft() 和 turnRight()”,因此如果有人想创建自己的汽车(或者在您的情况下 - 他们自己的插件),他们的汽车也需要能够turnRight()
和turnLeft()
.
让我们回到你的问题。如果您看到一段看起来“通用”的代码,您可能希望将通用部分提取到它自己的类中,然后继承该类。例如“所有动物都可以shout()
”或“所有工具都可以use()
-d”。但是,如果您想让这只鸭子知道那只鸭子 - 您需要在另一只鸭子中引用一只鸭子。
但是,这并不意味着您需要使用构造函数。构造函数用于对象不能没有的引用(不能处于有效状态)。例如new Duck(new DuckBrain())
有意义,但new Duck(new Duck())
没有意义。对于这些情况,您可能会引入setter(在链接中搜索 Java 示例)。Setter 是改变对象包含的内容的方法。
推荐阅读
- php - Cannot install WordPress error: "cannot connect to database"
- c - `atomic_compare_exchange_strong_explicit()` -- what do the various combinations of `success` and `failure` parameter do, when not equal?
- c# - 如何在构成 DataTable 中的第 3 列的 2 列值之间添加空格?
- r - Multiple plots gives a blank PDF, data dimension error
- c++ - 不能在 C++ 中包含标头
- sql - 如何在后台保存 SQL 查询分析,同时仍向用户提供记录?
- android - android studio Jsoup 缺少内容
- triggers - 将服务挂钩的 Azure Devops IP 列入白名单
- java - 为什么在分配给临时变量的 for 循环值中不能按原样打印?
- javascript - 数据表:未捕获的类型错误:无法读取未定义的属性“唯一”