activity - Android中抽象方法赋值时出现null.

【字号: 日期:2022-11-22浏览:26作者:雯心

问题描述

首先先声明两个类

public class Person { .....}public class Student { public Person A; public Student(Person a) {A = a; } .....}

MainActivity在实现抽象activity时出现空的返回值

public abstract class Main2Activity extends AppCompatActivity{ Student B = getStudent(); oncreate(...){ ......getStudent().getA();//A不为nullB.getA();//A为null } public abstract Student getStudent();}

MainActivity

public class MainActivity extends Main2Activity{ Person person = new Person(10); @Override public Student getStudent() {Student student = new Student(person);return student; }}

为什么会出现成员变量A为null的情况,但是在声明周期中赋值时并不会出现这个问题.两种情况下成员变量B都不会是null,请问是我哪里理解错误了.

问题解答

回答1:

这是类初始化时参数赋值顺序的问题,在子类,也就是MainActivity初始化时,首先会初始化父类,也就是Main2Activity。这时候Main2Activity中定义的Student B就需要赋初值了,而初始值来自getStudent()这个方法,于是这个方法就被执行。可是在这个方法执行的过程中,使用的MainActivity中的Person person其实还没有赋初值,其仍然还是null,所以getStudent()中引用的person就是null,这也就导致了后面调用getA()的时候返回的是null。MainActivity中的Person person的赋值,是在子类,也就是Main2Activity初始化操作完成之后的,这个时候Student B已经进行了赋值,所以这时候再对Person person进行赋值,其实不能改变Student B中引用的Person。

相关文章: