面试题答案
一键面试- C类中m()方法访问权限的设置:
- 根据多态下方法重写访问权限规则,子类重写方法的访问权限不能比父类被重写方法的访问权限更严格。由于B类中m()方法的访问权限是
protected
,所以C类中m()方法的访问权限可以是protected
或者public
。 - 从可维护性和扩展性角度考虑,建议设置为
protected
。这样设置的原因是,protected
权限可以保证该方法在子类和同包内的其他类中可见。如果设置为public
,虽然符合重写规则,但会使该方法的可访问范围更大,可能导致不必要的调用,增加代码维护的难度。在实际开发中,如果该方法只需要在继承体系内使用,protected
权限更为合适,它明确了该方法的使用范围,有助于代码的理解和维护。
- 根据多态下方法重写访问权限规则,子类重写方法的访问权限不能比父类被重写方法的访问权限更严格。由于B类中m()方法的访问权限是
- 不同访问权限设置对系统架构的影响:
- 使用
protected
权限:- 优点:
- 可维护性:明确限制了方法的访问范围,只有继承体系内和同包的类可以访问,减少了不必要的外部调用,使代码逻辑更加清晰。例如,在一个框架开发中,如果某个核心功能的扩展方法只希望框架内的子类或同包辅助类使用,
protected
权限能很好地实现这一目的,其他外部类无法随意调用,避免了误操作。 - 扩展性:有利于子类继承和扩展。子类可以在不改变方法访问范围的情况下进一步重写该方法,增加功能。比如,在一个游戏开发框架中,有一个
Character
类(类似A类),PlayerCharacter
类(类似B类)继承自Character
类,MageCharacter
类(类似C类)继承自PlayerCharacter
类。Character
类中的move()
方法(类似m()方法)是包访问权限,PlayerCharacter
类将其重写为protected
权限,MageCharacter
类再次重写时设置为protected
权限。这样,MageCharacter
类及其子类可以根据需要扩展move()
方法,同时其他无关类无法直接调用,保证了架构的稳定性。
- 可维护性:明确限制了方法的访问范围,只有继承体系内和同包的类可以访问,减少了不必要的外部调用,使代码逻辑更加清晰。例如,在一个框架开发中,如果某个核心功能的扩展方法只希望框架内的子类或同包辅助类使用,
- 缺点:在跨包使用时,可能需要通过一些中间类或接口来实现访问,稍微增加了代码复杂度。
- 优点:
- 使用
public
权限:- 优点:
- 可维护性:对于一些通用的、希望广泛被调用的方法,设置为
public
可以方便其他类直接调用,减少中间代理类的编写,在一些简单的工具类场景中比较实用。例如,一个通用的数学计算工具类MathUtils
,其中的add()
方法如果是public
,其他类可以直接调用,代码简洁明了。 - 扩展性:具有最大的扩展性,任何类都可以调用该方法,在一些需要高度开放接口的系统中很有用。比如,开发一个开放的SDK,提供给外部开发者使用,其中一些核心功能方法设置为
public
,方便外部开发者集成和使用。
- 可维护性:对于一些通用的、希望广泛被调用的方法,设置为
- 缺点:
- 可维护性:由于访问范围过大,可能会被随意调用,增加了代码的维护难度。如果方法内部实现发生改变,可能会影响到大量调用该方法的外部类,导致代码修改成本增加。
- 扩展性:从继承体系角度看,子类可能会面临方法被外部过度依赖的问题,在子类重写方法时需要考虑对外部调用的影响,限制了子类扩展的灵活性。
- 优点:
- 使用