首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用subClass toString - java打印subClass数组列表

用subClass toString - java打印subClass数组列表
EN

Stack Overflow用户
提问于 2022-06-19 22:10:24
回答 1查看 99关注 0票数 1

超类中有一个toString,子类中有一个toString。我想在超类的ArrayList中显示东西,但使用子类的toString。例如:

代码语言:javascript
复制
public class SuperClass{
    // field
    String name;
    // methods 
    public SuperClass(String name) {
        this.name = name;
    }
    @override
    public String toString() {
        return "Name: " + name;
    }
}

那么我有一个子类

代码语言:javascript
复制
public class SubClass extends SuperClass {
    // field 
    private int age;
    // methods
    public SubClass(String name, int age) {
        super(name);
        this.age = age;
    }
    @override
    public String toString() {
        return "Name: " + name +
               "\nAge: " + age;
    }
}

我想用子类的MyList在类toString中显示这个超类。,这有可能吗?

代码语言:javascript
复制
import java.util.ArrayList;

public class MyList {
    protected ArrayList<SuperClass> list = new ArrayList<>(); // display with Name and Age

    public void userInput() {
        // user inputting
        SubClass sub1 = new SubClass("Joe Black", 21);
        SubClass sub2 = new SubClass("Jane Black", 20);
        SuperClass sup1 = new SuperClass("Adam");
        list.add(sub1);
        list.add(sub2);
        list.add(sup1);
    }

    public void print() {
        for (SuperClass e : list) {
            System.out.println(e); // uses print methods of SuperClass or SubClass
        }
    }

    public static void main(String args[]) {
        MyList theList = new MyList();
        theList.userInput();
        theList.print();
    }
}

预期产出:

代码语言:javascript
复制
$ javac SubClass.java SuperClass.java MyList.java
$ java -cp . MyList                              
Name: Joe Black
Age: 21
Name: Jane Black
Age: 20
Name: Adam
$ 

此外,我还有多个子类。

我现在遇到的问题是,它只打印实际输出的名称:

代码语言:javascript
复制
$ javac SubClass.java SuperClass.java MyList.java
$ java -cp . MyList                              
Name: Joe Black
Name: Jane Black
Name: Adam
EN

回答 1

Stack Overflow用户

发布于 2022-07-02 08:38:32

为了方便起见,我将所有类放入一个文件中:

MyList.java

代码语言:javascript
复制
import java.util.ArrayList;
public class MyList {
    protected ArrayList<SuperClass> list = new ArrayList<>(); // display with Name and Age
    public void userInput() {
        // user inputting
        SubClass sub1 = new SubClass("Joe Black", 21);
        SubClass sub2 = new SubClass("Jane Black", 20);
        SuperClass sup1 = new SuperClass("Adam");
        list.add(sub1);
        list.add(sub2);
        list.add(sup1);
    }
    public void print() {
        for (SuperClass e : list) {
            if (e.getClass() == SuperClass.class)
            {
                // SuperClass has no attribute age. Therefore, create temporary SubClass instance
                SubClass s = new SubClass(e.name, 0);
                e = s;
            }
            System.out.println(e); // uses .toString of corresponding class 
        }
    }    
    public static void main(String args[]) {
        MyList theList = new MyList();
        theList.userInput();
        theList.print();
    }
}

class SuperClass {
        // field
    String name;
    // methods 
    public SuperClass(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Name: " + name;
    }
}

class SubClass extends SuperClass {
        // field 
    private int age;
    // methods
    public SubClass(String name, int age) {
        super(name);
        this.age = age;
    }

    @Override
    public String toString() {
        return "Name: " + name +
               "  Age: " + age;
    }
}

SuperClass没有属性age。因此,print方法使用精确的类检查,并创建一个临时SubClass实例,以便使用其toString方法。

这将产生以下输出。

代码语言:javascript
复制
$ javac MyList.java
$ java MyList      
Name: Joe Black  Age: 21
Name: Jane Black  Age: 20
Name: Adam  Age: 0
$ 

请注意,如果在SubClass中生成一个新的MyList.print实例,也可以通过其他方式修改输出,例如打印"Name: Adam:-“。MyList类可以随心所欲地处理SuperClass实例。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72680654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档