面试题答案
一键面试抽象类
- 特点:
- 可以包含抽象方法和具体方法。抽象方法只有声明,没有实现;具体方法有完整的方法体。
- 抽象类不能被实例化,只能被继承。
- 一个类只能继承一个抽象类。
- 在游戏角色系统中的应用场景及举例:当游戏中有多种不同类型的角色,但这些角色有一些共性的行为或属性时,可以使用抽象类。例如,创建一个
AbstractCharacter
抽象类,它包含一些所有角色都有的属性,如name
(名字)、health
(生命值),以及一些可能通用的具体方法,如displayInfo()
用于显示角色基本信息。同时,可能还有抽象方法,如attack()
,因为不同角色攻击方式不同。然后具体的角色类,如Warrior
(战士)、Mage
(法师)继承自AbstractCharacter
,并实现attack()
方法。
接口
- 特点:
- 所有方法都是抽象的,没有具体实现。
- 接口不能包含成员变量(除了
public static final
修饰的常量)。 - 一个类可以实现多个接口。
- 在游戏角色系统中的应用场景及举例:当游戏角色需要具备一些额外的功能,且这些功能并不适合用继承体系来表示时,可使用接口。比如,游戏中有部分角色具有飞行能力,创建一个
Flyable
接口,包含fly()
抽象方法。Angel
(天使)角色类除了继承某个基础角色抽象类外,还实现Flyable
接口,从而具备飞行能力。这样就可以灵活地为不同类型的角色添加飞行功能,而不需要通过复杂的继承结构来实现。
应用场景差异总结
- 抽象类:更侧重于定义一组具有共性的行为和属性,通过继承来实现代码复用,适合于存在明显继承关系,且有部分行为或属性可以通用的场景。
- 接口:更强调行为的定义,用于实现类的多态性和功能的灵活添加,适合于为不同类添加一些不相关的功能,打破单继承的限制。