【问题标题】:Java: Storing extended objects in arraylist and calling parent toString methodJava:在arraylist中存储扩展对象并调用父toString方法
【发布时间】:2014-06-28 09:53:39
【问题描述】:

我有一个关于调用 toString 方法的问题,我已经在父类中声明了保存在 arrayList 中的扩展对象。我有父“产品”类,然后我有扩展类“智能手机”。

我的问题是我已经在父类和扩展类中声明了 toString() 方法,我需要调用这两个方法,但我不知道如何在存储在 arrayList 中的扩展对象上调用父 toString() 方法。 谢谢你的建议。

【问题讨论】:

    标签: java class arraylist tostring


    【解决方案1】:

    您需要使用super 来引用您的父类。

    class A {
        @Override
        public String toString() {
            return "A's toString()";
        }
    }
    
    class B extends A {
        @Override
        public String toString() {
            return super.toString() + " " + "B's toString()";
        }
    }
    
    B b = new B();
    System.out.println(b); // prints "A's toString() B's toString()"
    

    编辑:

    如果您孩子的toString()总是调用父母的,那么您甚至不需要孩子的toString()

    如果您想为您的孩子保留一个在某些情况下与父母不同的自定义toString(),但您还希望能够从孩子那里调用父母的toString(),请使用委托方法。

    class B extends A {
        @Override
        public String toString() {
            ...
        }
    
        public String parentsToString() {
            return super.toString();
        }
    }
    
    B b = new B();
    b.parentsToString(); // will return the output of A's toString()
    

    【讨论】:

    • 谢谢,但我有存储在arrayList 中的子对象,我想在arrayList 中的这些对象上调用父对象的toString() 方法。所以我不知道如何在arrayList中的对象上调用super.toString
    • 非常感谢您的建议。
    • 任何时候我的朋友。快乐编码! :)
    【解决方案2】:

    默认情况下,我们编写的每个对象引用都会在内部调用自己的toString 方法。

    如果它没有定义,那么它将调用其直接父级的toString() 方法。

    但是如果您想使用子引用变量调用父级的toString() 方法,那么

    在 child 中定义 toString 并调用 parent 的 toString 并附加它自己的定义。

    例子

    class Parent {
        @Override
        public String toString() {
            return "Parent";
        }
    }
    
    class Child {
        @Override
        public String toString() {
            return super.toString() + " " + "child";
        }
    }
    
    Child child = new Child();
    System.out.println(child); // prints parent child
    

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 1970-01-01
      • 2013-04-14
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      相关资源
      最近更新 更多