面试题答案
一键面试-
继承(Inheritance)
- 特点:子类可以继承父类的属性和方法,通过
:
关键字实现继承关系。子类能复用父类的代码,同时可以重写父类的方法来满足自身需求。 - 适用场景:当存在具有共性特征和行为的类层次结构时适用,比如不同类型的动物都有一些共同的属性(如名称、年龄)和行为(如移动),可以将这些共性放在父类
Animal
中,不同的动物类(如Dog
、Cat
)继承Animal
类。
- 特点:子类可以继承父类的属性和方法,通过
-
接口(Interface)
- 特点:接口定义了一组方法的签名,但没有方法的实现。类通过
implements
关键字实现接口,一个类可以实现多个接口,实现接口的类必须实现接口中定义的所有方法。接口能让不同类实现相同的行为,实现代码复用。 - 适用场景:适用于需要不同类实现相同行为的场景,例如多个不同功能的类都需要支持
Serializable
接口,以实现数据序列化功能。
- 特点:接口定义了一组方法的签名,但没有方法的实现。类通过
-
委托(Delegation)
- 特点:通过
by
关键字实现,将一个对象的部分职责委托给另一个对象。委托类持有被委托对象的引用,并将特定方法调用转发给被委托对象。 - 适用场景:当希望复用某个类的部分功能,而又不想通过继承来实现时适用。比如
Observable
类可以通过委托的方式复用Observer
类的部分功能。
- 特点:通过
-
扩展函数(Extension Functions)
- 特点:可以为已有的类添加新的函数,而无需继承或修改该类的源代码。扩展函数在调用时和类的成员函数调用方式类似。
- 适用场景:适用于在不改变原有类结构的情况下,为类添加新功能。例如为
String
类添加一个扩展函数来判断字符串是否是数字格式。
-
伴生对象(Companion Object)
- 特点:在类内部定义的
companion object
,可以包含属性和方法,这些属性和方法类似于Java中的静态成员。可以通过类名直接访问伴生对象的成员。 - 适用场景:当需要为类提供一些全局的工具方法或常量时适用,例如为
MathUtils
类的伴生对象中定义一些常用的数学计算方法。
- 特点:在类内部定义的