자바 하위 클래스 대상 설정 을 만 들 고 부모 클래스 의 변 수 를 호출 합 니 다.

하위 클래스 를 통 해 부모 클래스 의 변 수 를 호출 하 는 방법 은 두 가지 가 있 습 니 다.
1.부모 클래스 의 변 수 를 Public 로 설정 합 니 다.

package triangle.opengl.wlz.stu.childusefathervariable; 
import android.util.Log; 
public class BasePublicVariable {
  private String TAG = getClass().getName();
  public int data;
  public void ptData(){
    Log.d(TAG, "ptData: " + data);
  }
}
우리 가 이렇게 할 때 필요 할 때 대상 에 이 변수의 값 을 직접 설정 하면 됩 니 다.하위 클래스 는 처리 할 필요 가 없습니다.

package triangle.opengl.wlz.stu.childusefathervariable; 
import triangle.opengl.wlz.stu.childusefathervariable.BasePublicVariable; 
public class ChildPublicVariable extends BasePublicVariable { 
}
2.구조 방법 을 통 해 전달:

package triangle.opengl.wlz.stu.childusefathervariable; 
import android.util.Log; 
public class BaseVariableInConstructed {
  private String TAG = getClass().getName();
 
  private int data;
  public BaseVariableInConstructed(int data){
    this.data = data;
  }
  public void ptData(){
    Log.d(TAG, "ptData: " + data);
  }
}
이때 자 류 는 슈퍼 방법 을 사용 하여 부계 의 구조 방법 을 호출 할 수 있다.

package triangle.opengl.wlz.stu.childusefathervariable;
 
import android.util.Log;
 
public class ChildVaralbleInConstructed extends BaseVariableInConstructed {
  public ChildVaralbleInConstructed(int data) {
    super(data);
  }
}
최종 사용 방법:

package triangle.opengl.wlz.stu.childusefathervariable; 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle; 
public class MainActivity extends AppCompatActivity {
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    test();
  }
 
  private void test(){
    ChildVaralbleInConstructed base = new ChildVaralbleInConstructed(100);
    base.ptData();
 
    ChildPublicVariable base2 = new ChildPublicVariable();
    base2.data = 10;
    base2.ptData();
  }
}
보충:자바 하위 클래스 가 부모 클래스 의 개인 변 수 를 방문 하 는 사고
예 는 다음 과 같다.
부모 클래스 User,개인 변수 name 과 money 포함;
그리고 두 개의 구조 함수 와 기본 적 인 getter 방법.

public class User {
  public User() {
  }
  public User(String name, int money) {
    this.name = name;
    this.money = money;
  }
  public String getName() {
    return name;
  }
  public int getMoney() {
    return money;
  }
}
하위 관리자 계승 사용자

public class Manager extends User {
  public Manager() {
  }
  public Manager(String name, int money) {
    super(name, money);
  }
  private String name;
  private int money;
  public void show(){
    System.out.println("  "+this.name+",  "+this.money+"  ");
    System.out.println("  "+this.getName()+",  "+this.getMoney()+"  ");
    System.out.println("  "+super.getName()+",  "+super.getMoney()+"  ");
  }
}
주 클래스 ClassDemo 에서 관리자 대상 을 새로 만 들 고 show()함 수 를 호출 합 니 다.

public class ClassDemo {
  public static void main(String[] args) {
    Manager m=new Manager("q",1);
    m.show();
  }
}
결 과 는 다음 과 같다.
저 는 null 입 니 다.저 는 0 원 입 니 다.
저 는 q 입 니 다.저 는 1 원 입 니 다.
저 는 q 입 니 다.저 는 1 원 입 니 다.
그 결과 1 은 이해 하기 쉽 습 니 다.이 클래스 의 두 변 수 는 초기 화 되 지 않 았 고 기본 값 으로 돌아 갑 니 다.
그 결과 2 처음에는 곤 혹 스 러 웠 습 니 다.하위 클래스 는 부모 클래스 의 getName()과 getMoney()를 물 려 받 았 지만 개인 변수 name 과 money 를 물 려 받 지 않 았 습 니 다.여기 서 돌아 오 는 값 은 누구의 것 입 니까?
그 다음 에 이 부분의 메모리 원 리 를 알 아 보 았 습 니 다.원래 하위 클래스 를 새로 만 들 때 먼저 더미 에 부모 클래스,부모 클래스 의 변수 와 방법,그리고 하위 클래스 만 의 변수 와 방법 을 새로 만 들 고 이들 은 공동으로 하위 공간 을 구성 합 니 다.
따라서 새 하위 클래스 를 만 든 후 부모 클래스 의 private 변 수 는 하위 클래스 에 계승 되 지 않 지만 실제 존재 합 니 다.직접 방문 할 수 없고 간접 적 으로 만 사용 할 수 있 습 니 다.
결과 2 에서 Manager 대상 은 생 성 할 때 구조 함수 에서 슈퍼(name,money)를 통 해 name 과 mongey 두 부모 클래스 의 개인 변 수 를 할당 하 였 습 니 다.this.getName()방법 을 사용 할 때 이 방법 은 부모 클래스 에서 계승 되 기 때문에 방법 에서 사용 하 는 변수 도 부모 클래스 의 두 개인 변수 이기 때문에 결과 2 에서 사용자 정의 두 값 을 되 돌려 줍 니 다.
결과 3 에서 슈퍼()는 부모 클래스 를 통 해 getter 방법 을 직접 호출 하고 반환 값 도 두 부모 클래스 의 개인 변수 입 니 다.
그러나 하위 관리자 에 getter 방법 을 다시 쓰 면 결과 2 가 달라 진다.

public class Manager extends User {
  public Manager() {
  }
  public Manager(String name, int money) {
    super(name, money);
  }
 /*****************************      ***************************/  
  @Override
  public String getName() {
    return name;
  }
  @Override
  public int getMoney() {
    return money;
  }
 /*****************************************************************/
  private String name;
  private int money;
  public void show(){
    System.out.println("  "+this.name+",  "+this.money+"  ");
    System.out.println("  "+this.getName()+",  "+this.getMoney()+"  ");
    System.out.println("  "+super.getName()+",  "+super.getMoney()+"  ");
  }
}
저 는 null 입 니 다.저 는 0 원 입 니 다.
저 는 null 입 니 다.저 는 0 원 입 니 다.
저 는 q 입 니 다.저 는 1 원 입 니 다.
현재 이 클래스 관리자 에 getter()방법 이 있 기 때문에 방법 내 에서 이 클래스 의 두 개의 name,money 변 수 를 직접 호출 합 니 다.따라서 결과 2 는 두 개의 초기 값 을 되 돌려 줍 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기