提问个问题,没整明白 [针对代码: Collection c = new ArrayList(),以下哪些您认为是正确的] - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ENNRIaaa
V2EX    Java

提问个问题,没整明白 [针对代码: Collection c = new ArrayList(),以下哪些您认为是正确的]

  •  
  •   ENNRIaaa 2020-07-02 12:23:40 +08:00 3377 次点击
    这是一个创建于 1927 天前的主题,其中的信息可能已经有所发展或是发生改变。

    针对代码:Collection c = new ArrayList(),以下哪些您认为是正确的

    A 、new ArrayList()创建了实际的对象

    B 、只能在 c 上调用 Collection 接口中声名的方法

    C 、它创建了引用 c 指向实际创建的 ArrayList 对象

    D 、Collection c 只是定义了实例的引用

    多选,主要是比较纠结 B 这个选项是对还是错的

    22 条回复    2020-07-03 12:32:03 +08:00
    Licsber
        1
    Licsber  
       2020-07-02 12:39:35 +08:00
    abcd
    Licsber
        2
    Licsber  
       2020-07-02 12:41:02 +08:00
    多态没学好吧 b 是典型的考试例题

    “当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。 在 Java 中有两种形式可以实现多态。 继承和接口。”
    RedBeanIce
        3
    RedBeanIce  
       2020-07-02 13:44:09 +08:00
    ACD 都是一样的,考的是堆栈,B 考的是啥呢,考的是继承和多态吧

    彩笔的我,想了大概一分钟才想清楚。。我第一眼也看不出来,记不住
    TtTtTtT
        4
    TtTtTtT  
       2020-07-02 14:00:59 +08:00
    B,我个人认为是错的。

    因为,尽管 c 作为引用是 Collection 类型的,但实际上也可以调用 ArrayList 的方法,包括但不限于通过反射,强制类型转换等方式。
    miaeLKK
        5
    miaeLKK  
       2020-07-02 14:09:59 +08:00 via Android
    实践一下,b 是对的。其实也不难理解,我有个鸟,但我只说我有个东西(引用类型东西),别人只知道我有个“东西”,不知道具体是啥,所以别人不能知道这个东西会飞。
    ENNRIaaa
        6
    ENNRIaaa  
    OP
       2020-07-02 16:20:43 +08:00 via iPhone
    @Licsber 我选了 B,确是错的,真是想不通
    Licsber
        7
    Licsber  
       2020-07-02 16:26:18 +08:00
    @TtTtTtT #4 啥东西理论上都能反射 那这样就没必要出题考你语言特性了 这是 OOP 最基本的特性
    强转肯定是错的 题目明确说了在 c 上调用
    Licsber
        8
    Licsber  
       2020-07-02 16:26:49 +08:00
    @ENNRIaaa #6 答案给出 b 是错的? 那答案错了
    lululau
        9
    lululau  
       2020-07-02 16:32:47 +08:00   2
    Collection d = c

    也可以在 d 上调用啊

    这出题目怕是小学没毕业,他想表达的是 “在 c 上只能调用 Collection 接口中声名的方法”,但这样还是不对,在 c 上也可以调用在 Object 和 Iterable 中声明的方法啊。。。
    ENNRIaaa
        10
    ENNRIaaa  
    OP
       2020-07-02 17:08:34 +08:00
    @lululau 可能是玩文字游戏把,搞不懂
    ENNRIaaa
        11
    ENNRIaaa  
    OP
       2020-07-02 17:10:07 +08:00
    @Licsber 答案是 ACD,我选了 ABCD,始终没想明白 B 怎么错了,就过来问问
    ychost
        12
    ychost  
       2020-07-02 17:14:29 +08:00
    B 错了,对象 c 不仅能掉 Collection 的方法,还能调用 ArrayList 的方法,((ArrayList)c).indexOf(o)
    Tenma
        13
    Tenma  
       2020-07-02 17:16:19 +08:00
    我也认为 ABCD,因为如果如果考虑特殊方式的话,很多看起来正确的都是错误的,就如同 private 的访问权限一样,用反射的话,也可以被访问。
    maninfog
        14
    maninfog  
       2020-07-02 17:21:17 +08:00 via Android
    同意 9 楼
    ENNRIaaa
        15
    ENNRIaaa  
    OP
       2020-07-02 17:39:05 +08:00
    @ychost 可能出题者的意思真的是这样把,通过强转
    NotFoundEgg
        16
    NotFoundEgg  
       2020-07-03 08:28:55 +08:00 via Android
    这题目文字游戏 b 咋说咋有理 它甚至还能说可以调用 Object 里的方法呢
    thinkingInJava
        17
    thinkingInJava  
       2020-07-03 09:21:50 +08:00
    这题真 zz,有这功夫玩文字游戏,不如出个引用传递值传递来的精髓
    thinkingInJava
        18
    thinkingInJava  
       2020-07-03 09:25:04 +08:00
    真纠结文字游戏,A 创建了实际对象,单一个实际对象吗? super()怎么说?
    TtTtTtT
        19
    TtTtTtT  
       2020-07-03 10:20:53 +08:00
    @Licsber
    emm,首先,并不是什么都能反射,你不能通过反射调用其他类的方法,强制类型转换也是如此。
    多态并不意味着对象的类型被修改,而是给予开发者一个一致的模式来处理类似的逻辑。
    在 c 上调用,指的是是否能通过一个基类的引用,调用到子类的方法。
    否则,为什么不问"只能在 c 上通过 c.someMethod()的方式调用 collection 接口中声明的方法"。
    Licsber
        20
    Licsber  
       2020-07-03 11:36:18 +08:00
    @TtTtTtT #19 是我表述不太完整 运行期的任何东西理论上都能通过反射取到
    所以这题的 b 你的答案是错误的么? 我还是坚持我#1 楼的看法 同意#13 楼的看法
    另外可能真像#9 楼讲的 出题人瞎搞 就是文字游戏 确实 zz 没有什么讨论必要
    你的表述跟我#2 楼的表述是不一致的 这题应该就是想要考多态 但是被玩成了文字游戏
    你的表述是 我可以用这个引用 c 来做*任何事情* 问能不能访问到具体子类的方法 那答案当然是可以
    但是这很明显就是纯粹坑人了 参照其他选项 不考多态 考反射 不合常理
    goodboy95
        21
    goodboy95  
       2020-07-03 11:50:20 +08:00
    说实话我也看不懂 B 是啥意思,如果真的尊重原文的话,那我就可以说“我可以再建一万个基于 Collection 的对象,每个对象上都可以调用 Collection 的方法”,但这句话总有种扯犊子的感觉
    TtTtTtT
        22
    TtTtTtT  
       2020-07-03 12:32:03 +08:00
    @Licsber
    我明白了,你认为这道题目的考察是多态。
    我个人的理解是,多态并没有要求 c 只能调用 collection 的方法,只是说 c 可以调用 collection 的方法,collection 的方法由子类分别实现。
    到具体的实现,就是可以用反射也可以用强制类型转换来获取运行时的具体子类。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     875 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:36 PVG 05:36 LAX 14:36 JFK 17:36
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86