首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在父类的arraylist中区分每个子类

在父类的ArrayList中区分每个子类,可以通过以下几种方式实现:

  1. 使用多态:多态是面向对象编程的重要特性之一,它允许将子类的对象赋值给父类的引用变量。在父类的ArrayList中存储不同子类的对象,然后通过类型转换将其还原为子类对象,从而区分每个子类。例如:
代码语言:java
复制
ArrayList<ParentClass> list = new ArrayList<>();
list.add(new ChildClass1());
list.add(new ChildClass2());

for (ParentClass obj : list) {
    if (obj instanceof ChildClass1) {
        ChildClass1 child1 = (ChildClass1) obj;
        // 处理ChildClass1对象
    } else if (obj instanceof ChildClass2) {
        ChildClass2 child2 = (ChildClass2) obj;
        // 处理ChildClass2对象
    }
}
  1. 使用自定义标识属性:在父类中定义一个标识属性,用于区分每个子类。子类可以根据需要重写该属性。然后在父类的ArrayList中存储不同子类的对象,并通过标识属性来区分每个子类。例如:
代码语言:java
复制
class ParentClass {
    protected String type;

    public String getType() {
        return type;
    }
}

class ChildClass1 extends ParentClass {
    public ChildClass1() {
        type = "ChildClass1";
    }
}

class ChildClass2 extends ParentClass {
    public ChildClass2() {
        type = "ChildClass2";
    }
}

ArrayList<ParentClass> list = new ArrayList<>();
list.add(new ChildClass1());
list.add(new ChildClass2());

for (ParentClass obj : list) {
    if (obj.getType().equals("ChildClass1")) {
        // 处理ChildClass1对象
    } else if (obj.getType().equals("ChildClass2")) {
        // 处理ChildClass2对象
    }
}
  1. 使用枚举类型:在父类中定义一个枚举类型,用于表示每个子类。子类可以根据需要重写该枚举类型。然后在父类的ArrayList中存储不同子类的对象,并通过枚举类型来区分每个子类。例如:
代码语言:java
复制
enum ChildType {
    CHILD_CLASS_1,
    CHILD_CLASS_2
}

class ParentClass {
    protected ChildType type;

    public ChildType getType() {
        return type;
    }
}

class ChildClass1 extends ParentClass {
    public ChildClass1() {
        type = ChildType.CHILD_CLASS_1;
    }
}

class ChildClass2 extends ParentClass {
    public ChildClass2() {
        type = ChildType.CHILD_CLASS_2;
    }
}

ArrayList<ParentClass> list = new ArrayList<>();
list.add(new ChildClass1());
list.add(new ChildClass2());

for (ParentClass obj : list) {
    if (obj.getType() == ChildType.CHILD_CLASS_1) {
        // 处理ChildClass1对象
    } else if (obj.getType() == ChildType.CHILD_CLASS_2) {
        // 处理ChildClass2对象
    }
}

以上是几种在父类的ArrayList中区分每个子类的方法,具体选择哪种方式取决于实际需求和设计。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

共17个视频
动力节点-JDK动态代理(AOP)使用及实现原理分析
动力节点Java培训
动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须实现接口, 没有接口时,需要使用cglib动态代理。 动态代理可以在不改变原来目标方法功能的前提下, 可以在代理中增强自己的功能代码。
共26个视频
【少儿Scratch3.0编程】0基础入门
小彭同学
“控制电脑,而不是被电脑控制”。AI时代,编程成为全球STEM教育小学阶段的最大热点和趋势,以美国为首的发达国家,都在推崇全民编程。在中国,编程等信息类课程的推广已经蔚然成风。2017年教育部印发的《义务教学小学科学课程标准》中,特别把STEM教育列为新课程标准的重要内容之一;
领券