ArrayList <SuperClass>中的SubClass对象是否保留SubClass独有的方法?

 justnicetwo 发布于 2023-02-13 18:09

基本上标题是什么,但一些细节.我有一个带有几个SubClasses的SuperClass.我需要一个ArrayList来保存两种类型的子类,因此需要类型为SuperClass的ArrayList.我尝试getQuantity()使用ArrayList.get(0).getQuantity();(假设索引0的类型为SubClass1)访问Subclass1的方法.我收到错误:类型SuperClass的getQuantity未定义.

放入SuperClass ArrayList时,SubClass对象是否不保留其属性?如果他们确实保留了他们的属性,我该如何访问它们?

1 个回答
  • 对象本身仍然是一个subclass,但是当你把它们从集合中拿出来时它只知道superclass它不能告诉你哪个是哪个,它必须选择共同点.

    如果您确切知道特定索引包含类型的对象,则Subclass可以将其强制转换:

    Subclass myObject = (Subclass) list.get(0);
    System.out.println(myObject.getQuantity());
    

    它应该工作.

    更安全的方法需要测试对象是否真的如你所想:

    SuperClass myObject = list.get(0);
    if ( myObject instanceof Subclass) {
      Subclass mySubObject = (Subclass) myObject;
      System.out.println(mySubObject.getQuantity());
    }
    

    如果对象不是类型Subclass,第一个示例引发异常,第二个示例因为它之前测试以确认不会引发异常.

    你需要理解的是,这SuperClass myObject = list.get(0)不是对象本身,而是访问内存中对象的引用.把它想象成一个允许你控制你的对象的遥控器,在这种情况下,它不是一个功能齐全的遥控器,因为它没有显示你所有的对象都可以做到,所以你可以切换到更好的一个(如Subclass myObject = (Subclass) list.get(0))能够访问所有功能.

    我肯定会推荐Head First Java书籍,因为它非常详细地介绍了这些内容(我从那里偷走了这个远程示例).

    2023-02-13 18:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有