java抽象类重载_java - 处理某些抽象类的子类的重载方法 - 堆栈内存溢出

最简单的方法是将isTeacher()方法添加到person类。

这是一个基本的实现(你已经写过的部分遗漏了)

abstract class Person {

public abstract boolean isTeacher();

}

class Teacher extends Person {

public boolean isTeacher() { return true; }

}

class Student extends Person {

public boolean isTeacher() {return false; }

}

abstract class Session {

public void enroll(Person p) {

if (p.isTeacher()) teachers.add((Teacher)p);

else student.add((Student)p);

}

}

如果你也想避免类型转换,试试这个......

abstract class Person {

public abstract Teacher asTeacher();

public abstract Student asStudent();

}

class Student extends Person {

public Student asStudent() { return this; }

public Teacher asTeacher() { return null; }

}

class Teacher extends Person {

public Student asStudent() { return null; }

public Teacher asTeacher() { return this; }

}

class Session extends Person {

public void enroll(Person p) {

Teacher t = p.asTeacher();

if (t != null) teachers.add(t);

else students.add(p.asStudent());

}

}

这种实现有一个小的弱点,它假设教师和学生是唯一的类型,但将其扩展到多种类型是相当简单的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值