자바 하위 클래스 대상 설정 을 만 들 고 부모 클래스 의 변 수 를 호출 합 니 다.
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 는 두 개의 초기 값 을 되 돌려 줍 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.