Android MainActivity重写的onCreate方法中为何可直接调用setContentView
为什么无需重写setContentView即可直接调用
这是Java继承的基础特性:子类继承父类后,天然拥有父类所有非private修饰的成员方法和属性,不需要重写就可以直接调用。重写方法的作用仅仅是当你需要修改父类原有方法的执行逻辑时才需要使用,并不是调用父类方法的前置条件。
对应你给出的普通Java示例,Test1继承Test后,就算你不重写getId()方法,也可以直接调用new Test1().getId()拿到返回值,和MainActivity里直接调用父类setContentView的逻辑完全一致。
为什么无需手动创建MainActivity实例就可以调用方法
Activity属于Android四大组件之一,它的实例创建、生命周期调度全部由Android系统Framework层负责,开发者不能通过new MainActivity()的方式创建可用的Activity实例(手动new出的实例没有绑定系统上下文环境,无法使用平台提供的各类能力)。
当你将MainActivity配置为应用启动页后,系统启动应用时会通过反射自动创建MainActivity的实例,之后按照生命周期流程回调onCreate方法。你重写的onCreate属于实例方法,方法执行时已经对应系统创建好的MainActivity实例,在方法内调用setContentView本质是调用this.setContentView,this就是已经初始化完成的实例,自然不需要你手动创建。
内容的提问来源于stack exchange,提问作者SINGH
相关产品推荐
相关产品推荐

