자바 에서 슈퍼 의 몇 가지 용법 과 this 의 차이
4410 단어 자바
class Base {
Base() {
System.out.println("Base");
}
}
public class Checket extends Base {
Checket() {
super();// ,
System.out.println("Checket");
}
public static void main(String argv[]) {
Checket c = new Checket();
}
}
슈퍼 로 아버지 구 조 를 계승 하 는 방법 을 사용 하고 싶 지만 첫 줄 에 두 지 않 았 다 면 슈퍼 이전의 문 구 는 자신 이 어떤 행 위 를 완성 하고 자 하 는 문 구 를 만족 시 키 기 위해 서 였 을 것 이다.그러나 슈퍼 로 아버 지 를 계승 하 는 구조 방법 을 사용 했다.그러면 예전 에 한 수정 은 모두 예전 으로 돌아 가 고 다시 아버지 류 의 구조 방법 이 되 었 다 는 것 이다.
2.자바 에 서 는 하위 클래스 의 구성원 변수 나 방법 이 초 클래스(때로는 부모 클래스 라 고도 함)의 구성원 변수 나 방법 과 동명 이인 을 만 날 수 있 습 니 다.하위 클래스 의 구성원 변수 나 방법 명 우선 순위 가 높 기 때문에 하위 클래스 의 동명 멤버 변수 나 방법 은 초 클래스 의 구성원 변수 나 방법 을 숨 깁 니 다.그러나 우 리 는 초 클래스 의 이 구성원 변수 나 방법 을 사용 하려 면 슈퍼 를 사용 해 야 합 니 다.
name 과 방법 value()는 코드 에 슈퍼,슈퍼.name,슈퍼.value()를 사 용 했 습 니 다.슈퍼.value()를 호출 하지 않 으 면 슈퍼.name 은 부모 클래스 의 기본 값 null 을 되 돌려 줍 니 다.이 방법 을 호출 할 때 슈퍼.value()방법 은 구성원 변 수 를 China 로 할당 하고 슈퍼.name 을 이용 하여 부모 클래스 의 구성원 변 수 를 호출 합 니 다.
또한,주의해 야 할 것 은 슈퍼.name 이 구성원 변수의 값 을 호출 하 는 것 입 니 다.
슈퍼.name 이 되 돌려 주 는 값 은 부모 구성원 변수의 값 xianfan 입 니 다.이때 슈퍼.value()방법 은 작 동 하지 않 습 니 다.
3.슈퍼 로 매개 변 수 를 직접 전달:
class Person {
public static void prt(String s) {
System.out.println(s);
}
Person() {
prt("A Person.");
}
Person(String name) {
prt("A person name is:" + name);
}
}
public class Chinese extends Person {
Chinese() {
super(); // (1)
prt("A chinese.");// (4)
}
Chinese(String name) {
super(name);// (2)
prt("his name is:" + name);
}
Chinese(String name, int age) {
this(name);// (3)
prt("his age is:" + age);
}
public static void main(String[] args) {
Chinese cn = new Chinese();
cn = new Chinese("kevin");
cn = new Chinese("kevin", 22);
}
}
:A Person.
A chinese.
A person name is:kevin
his name is:kevin
A person name is:kevin
his name is:kevin
his age is:22
이 프로그램 에서 this 와 슈퍼 는 예전 처럼'...'로 한 방법 이나 구성원 을 연결 하 는 것 이 아니 라 그 다음 에 적당 한 인 자 를 직접 따라 가 는 것 이기 때문에 그 의미 도 달 라 졌 다.슈퍼 후 파 라 메 터 를 추가 하 는 것 은 부모 클래스 에서 같은 형식의 구조 함 수 를 호출 하 는 것 입 니 다.예 를 들 어 1 과 2 곳 입 니 다.this 후 매개 변 수 를 추가 하면 현재 같은 매개 변 수 를 가 진 구조 함수,예 를 들 어 3 곳 을 호출 합 니 다.물론 Chinese 의 각 재 부팅 구조 함수 에서 this 와 슈퍼 는 일반적인 방법 에서 도 사용 할 수 있 습 니 다.예 를 들 어 4 곳 에서'this.prt'(부모 클래스 의 그 방법 을 계 승 했 기 때 문)또는'슈퍼.prt'(부모 클래스 의 방법 이 고 이불 클래스 에 접근 할 수 있 기 때 문)로 바 꿀 수 있 습 니 다.하지만 이 정도 면 사족 을 그 리 는 맛 이 나 는 것 같다.
4.슈퍼 와 this 의 공통점 과 차이 점:
1)슈퍼(매개 변수):기본 클래스 의 특정한 구조 함수(구조 함수 의 첫 번 째 문 구 를 호출 해 야 합 니 다)
2)this(매개 변수):이 클래스 에서 다른 구조 함수(구조 함수 의 첫 번 째 문 구 를 위해 야 함)3)슈퍼:현재 대상 의 직접 부모 클래스 의 구성원(직접 부모 클래스 에 숨겨 진 부모 클래스 의 구성원 데이터 나 함수 에 접근 하 는 데 사용 합 니 다.기본 클래스 와 파생 클래스 에 같은 구성원 정의 가 있 을 때:슈퍼.변수 이름 슈퍼.구성원 함수 이름(실제 참조)
4)this:현재 대상 이름 을 대표 합 니 다.(프로그램 에서 이의 성 이 생기 기 쉬 운 곳 은 this 를 사용 하여 현재 대상 을 가 리 켜 야 합 니 다.함수 의 형 참여 클래스 의 구성원 데이터 가 동일 하 다 면,이 때 this 로 구성원 변수 이름 을 가리 켜 야 합 니 다)
5)슈퍼()를 호출 하려 면 하위 구조 방법의 첫 줄 에 써 야 합 니 다.그렇지 않 으 면 컴 파일 이 통과 되 지 않 습 니 다.모든 하위 구조 방법의 첫 번 째 문 구 는 슈퍼()를 함 축적 으로 호출 하 는 것 이다.만약 에 부모 류 가 이런 형식의 구조 함수 가 없다 면 컴 파일 할 때 잘못 보고 할 것 이다.
6)슈퍼()는 this()와 유사 하 며,슈퍼()는 하위 클래스 에서 부모 클래스 의 구조 방법 을 호출 하고,this()는 같은 클래스 에서 다른 방법 을 호출 하 는 것 과 구별 된다.
7)슈퍼()와 this()는 모두 구조 방법 내 첫 줄 에 놓 아야 한다.
8)this 로 구조 기 를 호출 할 수 있 지만 두 개 를 호출 할 수 없습니다.
9)this 와 슈퍼 는 하나의 구조 함수 에 동시에 나타 날 수 없다.this 는 반드시 다른 구조 함 수 를 호출 할 것 이기 때문에 다른 구조 함수 도 반드시 슈퍼 문장의 존재 가 있 기 때문에 같은 구조 함수 에 같은 문구 가 있 으 면 문장의 의 미 를 잃 고 컴 파일 러 도 통과 하지 못 한다.
10)this()와 슈퍼()는 모두 대상 을 가리 키 기 때문에 static 환경 에서 사용 할 수 없습니다.포함:static 변수,static 방법,static 구문 블록.
11)본질 적 으로 this 는 본 대상 을 가리 키 는 지침 이지 만 슈퍼 는 자바 키워드 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.