【问题标题】:How to cast an array of abstract classes by an array of interfaces如何通过接口数组转换抽象类数组
【发布时间】:2020-10-05 15:22:41
【问题描述】:

我有一个小问题。
假设我们有Person 是一个接口,Student 是一个抽象类,UnderGrad 是一个实现Person 并扩展Student 的普通类。

然后,在另一个班级中,有一个学生数组,即Student[],其中仅包含UnderGrad 对象。

在那个类中,有一个静态方法,它以Person[] 为参数,并按年龄对它们进行排序。

public static sortStudents(Person[] people) {
    // It sorts them 
}

如何将充满UnderGrads 的数组Student[] 转换为由UnderGrad 实现的Person[] 数组?

【问题讨论】:

  • 一种方法是让您的Student 类实现Person 而不是Undergrad

标签: java sorting user-interface casting abstract


【解决方案1】:

一个抽象类可以实现一个接口,甚至不需要声明任何接口方法。然后任何自动扩展抽象类的类也实现了该接口。例如,类AbstractTableModel 实现了接口TableModel,但不包括方法getRowCount()。因此,任何自动扩展AbstractTableModel 的类也实现了接口TableModel,因此必须实现方法getRowCount()

所以你需要做的就是让 [abstract] 类Student 实现接口人,并让类UnderGrad 实现Person 的方法,我知道你已经这样做了,无论如何。

public interface Person { }

public abstract class Student implements Person {
    // No need to include any methods from 'Person'
}

public class UnderGrad extends Student {
    // Here you must implement methods of 'Person'
}

如果您的sortStudents() 方法只调用接口Person 的方法,则不需要任何强制转换。

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2017-03-03
    相关资源
    最近更新 更多