面试题答案
一键面试定义方式
- 对象表达式:在需要一个对象实例的地方直接定义并创建对象。格式为
object : [超类型列表] { /* 代码块 */ }
,如果没有超类型,直接object { /* 代码块 */ }
。val myObject = object { val message = "This is an object expression" fun printMessage() { println(message) } }
- 伴生对象:在类内部使用
companion object
关键字定义,一个类只能有一个伴生对象。class MyClass { companion object { val companionMessage = "This is a companion object" fun printCompanionMessage() { println(companionMessage) } } }
作用域
- 对象表达式:定义后在其所在作用域内可用,通常用于局部变量或作为函数参数传递等,其作用域局限于定义它的代码块。
- 伴生对象:作用域在类内部,通过类名访问,它与类紧密关联,像类的静态成员一样,其生命周期与类相关。
使用场景
- 对象表达式:
- 用于创建一次性使用的对象,例如创建匿名监听器。
import android.view.View import android.widget.Button import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val textView = findViewById<TextView>(R.id.textView) val button = findViewById<Button>(R.id.button) button.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View) { textView.text = "Button Clicked" } }) } }
- 伴生对象:
- 用于定义与类相关的全局属性和方法,类似Java中的静态成员。例如定义工厂方法,方便创建类的实例。
class User(val name: String, val age: Int) { companion object { fun createUser(name: String, age: Int): User { return User(name, age) } } } val user = User.createUser("John", 30)