我有一个名为“学生”的班级作为家长和2个子班级(本科和研究生)......
Student[] student;
student=new Student[10];
我需要在子类内的数组中设置值..
所以我的问题是如何从主要方法调用该方法?
这是我想要调用的方法
public void setInternship(boolean Internship){
this.Internship=Internship;}
及其内部本科班级
答案 0 :(得分:1)
通常,如果您有一个公共基类,并且想要提供属于所有子类的不同特定功能,则应使用接口或抽象方法,例如:
abstract class Student {
abstract void setInternship(boolean internship);
}
class Undergraduate {
void setInternship(boolean internship) { this.internship = internship; }
}
情况并非总是如此,因为您可能会遇到只有某些子类能够响应特定功能的情况,在这种情况下您有两种选择:
第一种情况很简单:
Undergraduate ud = new Undergraduate();
ud.setInternship(true);
students[0] = ud;
第二种情况也很简单:
students[0] = new Undergraduate();
((Undegraduate)students[0]).setInternship(true);
将类型转换为另一个类型,不允许输入类型,将在运行时引发ClassCastException
。为避免这种情况,您可以使用instanceof
运算符:
if (students[0] instanceof Undergraduate)
((Undegraduate)students[0]).setInternship(true);
答案 1 :(得分:0)
如果您知道数组中的特定Student
实际上是Undergraduate
,那么您可以将其投射:
student[0] = new Undergraduate(...);
Undergraduate undergraduate = (Undergraduate)student[0]; // This is the cast
undergraduate.setInternship(internship);
答案 2 :(得分:0)
如果你有本科生和研究生的数组,你可以遍历数组,检查该数组的索引位置是否包含本科课程的实例,然后调用该方法。
答案 3 :(得分:0)
为了能够调用子类的方法,实际的对象必须是该子类。例如,您将拥有:
Student[] students = new Students[1];
students[0] = new Undergraduate();
((Undergraduate))students[0]).setInternship(new Internship());
或者如果你有一个更大的数组而不知道对象的实际类型,你必须在类型之前检查以避免ClassCastException
:
for (int i = 0; i < students.length; ++i) {
if (students[i] instanceof Undergraduate) {
((Undergraduate)students[i]).setInternship(new Internship());
}
}
答案 4 :(得分:0)
您尝试初始化“实习”的字段对于基类“学生”不可见。要初始化子类(“本科”)字段,您需要输入“学生”类型的对象到“本科生”
Student[] student;
student=new Student[10];
((UnderGraduate)student).setInternship(true);
我不知道你的用例,但理想情况下你的设计应该是这样的,即父母班级应该对儿童班的领域一无所知,所以在你的情况下,学生班不应该知道“本科和研究生”中的字段< / p>
理想情况下,学生的所有属性,例如姓名,年龄,DOB等应与学生班一起使用,您应该将本科和研究生的特定属性添加到各自的班级。
希望这有帮助。