찾다

 >  Q&A  >  본문

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

首先先声明两个类

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不为null
        B.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,请问是我哪里理解错误了.

阿神阿神2773일 전431

모든 응답(1)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 17:51:13

    클래스 초기화 시 매개변수 할당 순서에 문제가 있습니다.
    하위 클래스인 MainActivity이 초기화되면 상위 클래스인 Main2Activity가 먼저 초기화됩니다. 이때, Main2Activity에 정의된 Student B에는 초기값을 할당해야 하는데, 초기값은 getStudent() 메소드에서 나오므로 이 메소드가 실행된다. 그러나 이 메서드를 실행하는 동안 사용된 MainActivityPerson person에는 실제로 초기값이 할당되지 않았고 여전히 null이므로 getStudent()에서 참조하는 personnull입니다. , 이는 또한 나중에 getA()가 호출될 때 null가 반환되도록 합니다.
    MainActivityPerson person 할당은 하위 클래스, 즉 Main2Activity 초기화 작업이 완료된 후 수행됩니다. 이때 Student B은 이미 할당되었으므로 Person person이 다시 할당되었습니다. 실제로 Student B에 참조된 Person은 변경할 수 없습니다.

    회신하다
    0
  • 취소회신하다