gpt4 book ai didi

java - 基本接口(interface)说明

转载 作者:行者123 更新时间:2023-12-02 00:06:54 25 4
gpt4 key购买 nike

我觉得我应该知道这一点,但当被问到时却无法真正解释。我有一个方法:

public <T extends IByteConverter<T>> int write(T obj) throws IOException {
byte[] byteArray = obj.toByteArray();
raFile.write(byteArray);
//keeps track of size of what was written
return byteArray.length;
}

和我的界面:

interface IByteConverter<T> {
public byte[] toByteArray();
public T fromByteArray(byte[] byteArray);
}

当我调用 obj.toByteArray() 时,我的程序如何知道要做什么?在我的类(class)中,我没有实际实现 IByteConverter 中的代码,但程序按预期工作。有没有一个简单的方法来解释发生了什么?

最佳答案

让我们用另一个例子让事情更容易理解:您定义一个接口(interface) Fruit,它有一个方法 getColor()。此方法的约定是它返回一种颜色。

根据此约定,您定义一个类,该类采用 Fruit 数组,并计算红色水果的数量。

您不需要任何实现来编译此方法,因为您可以确定唯一可以传递给此方法的是对象数组,这些对象是确实实现了 Fruit 接口(interface)的类。为了使该方法运行,您需要至少定义一个实现 Fruit 接口(interface)的类(例如 Apple ),并构造该类的对象数组。

这就是多态性的全部内容:只要尊重其接口(interface)的约定,您就可以在不知道其实际类是什么的情况下调用对象的方法。

泛型不会让这变得不同。由于 obj 的类型为 T,并且 T 扩展了 IByteConverter,因此您可以调用 toByteArray( ) obj 上的方法。

关于java - 基本接口(interface)说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652763/

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