[英]Subclass in Superclass Arraylist Java
我有一個超類Student
和兩個繼承自 Student 的子類RStudent
和CStudent
。 我希望能夠同時擁有一個RStudent
和CStudent
ArrayList
。 我試過只使用ArrayList<Student> students = new Arraylist<>();
但我無法訪問任何特定於子類的變量,例如,如果我使用students.add(newCStudent)
,當我嘗試使用students.get(0).mark
( students.get(0).mark
(這是僅在CStudent
的變量)時不起作用。 我怎樣才能做到這一點?
你不能同時擁有它 - 如果你有一個List<Student>
來保存兩種類型的Student
,你不能在沒有明確向下轉換的情況下訪問RStudent
或CStudent
的特定成員。 例如
// Either check instanceof explicitly,
// or have some prior knowledge the element is a CStudent:
int mark = ((CStudent) students.get(0)).mark;
List
而不是ArrayList
本身,例如List<Student>
。Student
不應該知道關於其子類的任何信息,即為了使用子類的引用訪問子類的元素,您需要告訴編譯器您要使用引用來訪問子類的元素超類,這是通過向下轉換來完成的,即將超類的引用轉換為子類的類型。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.