gpt4 book ai didi

java - 将两个类相互连接

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:40 24 4
gpt4 key购买 nike

因此,我想在两个类之间创建关联,根据我在一些设计模式中读到的内容,使用接口(interface)很方便(在 Android Studio 中,它用于将 fragment 与 Activity 绑定(bind))。

看看这段代码:

首先,我们有 A 类:

public class A {

public static void main(String[] args) {
B b = new B();
b.foo();
}
}

然后,我们有 B 类:

class B {
private int i;

interface Drawable {
void show(int i);
}

public B() {
this.i = 5393;
drawable = new C();
}
private Drawable drawable;

public void foo() {
drawable.show(this.i);
}
}

最后 C 类:

class C implements B.Drawable {

@Override
public void show(int i) {
System.out.println("I'm showing this method, and i = " + i);
}
}

我正在思考的是这一行:

drawable = new C();

有人可以解释一下我们如何将新对象从类 C 分配给接口(interface),我知道这是因为类 C 实现了该接口(interface),但是,我很难得到所有这些。对我来说,这个操作的总体看法是相当严酷的,很难克服。

在 Android 中,我们将该接口(interface)分配给 Activity(最近的补丁将其更改为上下文,即 Activity 的实例)。

最佳答案

这就是多态性在起作用。

在 Java 中,您可以将子类(或接口(interface)的实现)的实例分配给父类(super class)(或接口(interface))类型的变量。

现在,接口(interface)实际上无法实例化。您无法在接口(interface)上调用 new 并获取该接口(interface)的实例。但是,您可以创建接口(interface)类型的变量(在本例中为B.Drawable),并为其分配任何实现类的实例(在本例中为C)。

获得一些直觉的一个简单方法是:

考虑一个用于视频游戏的 Car 类型的接口(interface)。假设它只包含一些方法,代表汽车的行为(具体来说,我们可以让汽车做什么)。假设它有 startEngine()changeGear()driveAhead() 和其他此类方法。这些的具体实现可能会有所不同(齿轮可以手动或自动更改,点火系统可以更改等)。但是,所有汽车都具有这些通用方法,并且您可以创建一个 Car 类型的变量,然后在视频游戏中使用它。您将拥有一组方法来调用任何类型的汽车,从而简化您的编码。

但该接口(interface)无法实例化。因此,您在各种类中实现它,并实例化这些类。你可以拥有一辆奔驰、一辆法拉利、一些其他汽车,它们有自己的属性和自己的方法实现。您无需为每种类型的汽车创建单独的引用变量,只需将任何汽车的实例(通过语句短语 new Mercedes()new Ferrari() 等获得)分配给 Car 变量即可。然后只需使用 Car 中声明的方法即可。

关于java - 将两个类相互连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50306273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com