자바에서 슈퍼의 몇 가지 용법과 차이점을 상세히 설명하다

4370 단어 javasuperthis
1. 하위 클래스의 구조 함수는 슈퍼를 인용하려면 반드시 슈퍼를 함수의 수위에 두어야 한다

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. 자바에서는 하위 클래스의 구성원 변수나 방법이 상위 클래스의 구성원 변수나 방법과 같은 이름을 가진 경우도 있습니다.하위 클래스의 구성원 변수나 방법명 우선순위가 높기 때문에 하위 클래스의 동명 구성원 변수나 방법은 슈퍼 클래스의 구성원 변수나 방법을 숨긴다. 그러나 우리가 슈퍼 클래스의 이 구성원 변수나 방법을 사용하려면 슈퍼를 사용해야 한다

class Country {

String name;

 

void value() {

name = "China";

}

}

 

class City extends Country {

String name;

 

void value() {

name = "Hefei";

super.value();// ,super.name null

System.out.println(name);

System.out.println(super.name);

}

 

public static void main(String[] args) {

City c=new City();

c.value();

}

}

하위 클래스에서 상위 클래스의 구성원 변수name와 방법value()를 인용하기 위해 코드에서 슈퍼,super를 사용합니다.name과 super.value (), 슈퍼를 호출하지 않으면.value () 시, super.name 부모 구성원 변수 기본값null을 되돌려줍니다. 이 방법을 호출할 때super.value () 방법은 구성원 변수name를 중국으로 지정하고 슈퍼를 이용합니다.name 은 상위 클래스의 구성원 변수 값을 호출합니다.
그리고 주의해야 할 것은 슈퍼다.name 호출은 구성원 변수의 값입니다.결과: Hefei
xianfan
이때, 슈퍼.name가 되돌려주는 값은 상위 구성원 변수의 값xianfan입니다. 이때의 슈퍼.value () 방법은 작용하지 않습니다.
 
3. 슈퍼 직접 전달 매개 변수:

class Country {

String name="xianfan";

 

String value(String name) {

name = "China";

return name;

}

}

 

class City extends Country {

String name;

 

String value(String name) {

name = "Hefei";

super.value(" ");// ,super.name null

System.out.println(name);

System.out.println(super.name);

return name;

}

 

public static void main(String[] args) {

City c=new City();

c.value(" ");

}

}

결과: 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곳입니다.물론 중국어의 각 재부팅 구조 함수에서this와 슈퍼는 일반적인 방법에서의 여러 가지 사용법도 사용할 수 있다. 예를 들어 4곳에서'this.prt'(부류의 그 방법을 계승했기 때문에)나'super.prt'(부류의 방법이고 이불류의 접근이 가능하기 때문에)로 바꿀 수 있다.하지만 이렇게 하면 뱀을 그리는 맛이 나는 것 같다.
4. 슈퍼와this의 공통점:
1) 슈퍼 (매개 변수): 기본 클래스의 어떤 구조 함수를 호출합니다 (구조 함수의 첫 번째 문장이어야 합니다)
2)this(매개 변수): 이 클래스에서 다른 형성된 구조 함수를 호출합니다 (구조 함수의 첫 번째 문장이어야 합니다) 3)super: 현재 대상의 직접 부류의 구성원을 인용합니다 (직접 부류에 숨겨진 부류의 구성원 데이터나 함수에 접근하는 데 사용됩니다. 기본 클래스와 파생 클래스에 같은 구성원 정의가 있을 때: 슈퍼. 변수명 슈퍼. 구성원 함수 이름(실참)
4)this: 현재 대상 이름을 나타냅니다. (프로그램에서 이의성이 생기기 쉬우므로this를 사용하여 현재 대상을 가리켜야 합니다. 함수의 형 참여 클래스의 구성원 데이터가 이름이 같으면,this로 구성원 변수 이름을 가리켜야 합니다.)
5) 슈퍼 () 를 호출하려면 하위 클래스 구조 방법의 첫 줄에 써야 합니다. 그렇지 않으면 컴파일이 통과되지 않습니다.모든 하위 클래스 구조 방법의 첫 번째 문장은 슈퍼 () 를 은밀하게 호출합니다. 만약에 부류가 이런 형식의 구조 함수가 없다면 컴파일할 때 오류를 보고합니다.
6) 슈퍼()와this()는 유사하다. 차이점은 슈퍼()는 하위 클래스에서 상위 클래스를 호출하는 구조 방법,this()는 같은 클래스에서 다른 방법을 호출한다.
7) 슈퍼()와this()는 모두 구조 방법의 첫 번째 줄에 놓아야 한다.
8)this로 구조기를 호출할 수 있지만 두 개를 호출할 수 없다.
9)this와 super는 하나의 구조 함수에 동시에 나타날 수 없다.this는 반드시 다른 구조 함수를 호출하기 때문에 다른 구조 함수도 반드시 슈퍼 문장의 존재가 있기 때문에 같은 구조 함수에 같은 문장이 있으면 문장의 의미를 잃고 컴파일러도 통과하지 못한다.
10)this()와 super()는 모두 대상을 가리키기 때문에 static 환경에서 사용할 수 없습니다.포함:static 변수,static 방법,static 문장 블록.
11) 본질적으로 말하자면this는 본 대상을 가리키는 바늘이지만 슈퍼는 자바 키워드이다.

좋은 웹페이지 즐겨찾기