簡體   English   中英

超類 Arraylist Java 中的子類

[英]Subclass in Superclass Arraylist Java

我有一個超類Student和兩個繼承自 Student 的子類RStudentCStudent 我希望能夠同時擁有一個RStudentCStudent ArrayList 我試過只使用ArrayList<Student> students = new Arraylist<>(); 但我無法訪問任何特定於子類的變量,例如,如果我使用students.add(newCStudent) ,當我嘗試使用students.get(0).mark ( students.get(0).mark (這是僅在CStudent的變量)時不起作用。 我怎樣才能做到這一點?

你不能同時擁有它 - 如果你有一個List<Student>來保存兩種類型的Student ,你不能在沒有明確向下轉換的情況下訪問RStudentCStudent的特定成員。 例如

// Either check instanceof explicitly, 
// or have some prior knowledge the element is a CStudent:
int mark = ((CStudent) students.get(0)).mark;
  1. 我建議您聲明泛型類型的引用List而不是ArrayList本身,例如List<Student>
  2. 超類Student不應該知道關於其子類的任何信息,即為了使用子類的引用訪問子類的元素,您需要告訴編譯器您要使用引用來訪問子類的元素超類,這是通過向下轉換來完成的,即將超類的引用轉換為子類的類型。
  3. 了解可以使用運算符instanceof檢查對象的類型也可能對您有所幫助。

例如

List<Student> students = new ArrayList<>();

CStudent s1 = new CStudent();
s1.setMark(90);
students.add(s1);

RStudent s2 = new RStudent();
students.add(s2);

//...and so on

for (Student student : students) {
    if (student instanceof CStudent) {// Checking if the instance is of type, CStudent
        CStudent s = (CStudent) student; // downcasting
        System.out.println(s.getMark());// Assuming `CStudent` has `public` getter for mark
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM