将两个班级相互连接

时间:2018-05-12 12:30:30

标签: java android class interface

所以,我想在两个类之间创建一个关联,从我在一些设计模式中读到的,方便的,使用一个接口,(在Android Studio中,它用于将片段与活动绑定)。 / p>

看看这段代码:

首先,我们有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类分配到一个接口,我知道这是因为C类实现了这个接口,然而,我很难全部完成。对于我来说,这次行动的一般观点非常苛刻。

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

1 个答案:

答案 0 :(得分:0)

这是多态性在起作用。

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

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

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

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

但是接口无法实例化。所以你在各种类中实现它,实例化这些类。你可以拥有梅赛德斯,法拉利,其他一些汽车,拥有自己的属性,以及他们自己的方法实现。您可以简单地将任何汽车的实例(通过语句短语Carnew Mercedes()等获得)分配给Car变量,而不是为每种类型的汽车创建单独的参考变量。然后只使用Car中声明的方法。