gpt4 book ai didi

java - 多态对象字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:51 26 4
gpt4 key购买 nike

我没有理解多态性。

以这个例子为例:

Object o = new String ("foo");

我做不到

o.substring (1,2)

谁能给我解释一下这个问题?

最佳答案

这是 Liskov Substitution Principle 的结果,其中指出(总结):

If S and T are objects, and T is a subtype of S, then T may be used where S is expected.

String Object 的一个子类型,因此如果您的赋值操作需要 Object,那么它将愉快地接受 Object 或其任何子类型。

(注意:Object 不是 String。所有String都是Object,但并非所有 Object 都是 String。)

这并不意味着您可以访问子类型的任何 方法。在给定继承层次结构的情况下,Object 对其子类的任何特定方法一无所知,也不可能 - 无法将其后代的功能告知祖先类。因为 Object 没有与之关联的 substring 方法,所以您的代码会正确地导致编译失败。

(并且它应该,因为 Object所有类的祖先。不能保证任何给定的 Object 都是 字符串.)

长期的建议是不要使用过于不明确的对象类型(随着层次结构链的上升,功能变得不那么具体 - 当您上升到 Object< 时,您会失去功能) 来完成更具体类型的特定内容。

关于java - 多态对象字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53840749/

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