Java의 this 및 super 키워드에 대한 상세 분석
이 글은 java에 대한 관련 지식을 주로 키워드로 소개하고, 그 차이점도 함께 살펴보겠습니다.
추천 학습: "java 비디오 튜토리얼"
1. "this" 키워드 사용
1. 이게 뭐죠?
- Java에서
this
키워드의 기능은 "현재"를 의미하는 의미에 매우 가깝습니다.
2. Function
this
关键字比较难理解,它的作用和其词义很接近,表示“当前”的意思。
2. 作用
this
关键字可以用来修饰、调用:属性、方法、构造器。this
关键字只能在方法内部使用。
它在方法内部使用,即这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象。
3. 使用
- 什么时候使用this关键字呢?
当在方法内需要用到调用该方法的对象时,就用
this
。具体的:我们可以用this
来区分属性和局部变量。比如:this.name = name;
3.1 修饰属性和方法
this
理解为:当前对象或当前正在创建的对象
在类的方法中,我们可以使用this.属性
或this.方法
的方式,调用当前对象属性或方法。但是,通常情况下,我们都选择省略this.
。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用this.变量
的方式,表明此变量是属性,而非形参。
使用this
访问属性和方法时,如果在本类中未找到,会从父类中查找。
代码演示:
class Person{ // 定义Person类 private String name ; private int age ; public Person(String name,int age){ this.name = name ; this.age = age ; } public void getInfo(){ System.out.println("姓名:" + name) ; this.speak(); } public void speak(){ System.out.println(“年龄:” + this.age); } }
3.2 调用构造器
在类的构造器中,我们可以使用
this.属性
或this.方法
的方式,调用当前正在创建的对象属性或方法。但是,通常情况下,我们都选择省略this.
。特殊情况下,如果构造器的形参和类的属性同名时,我们必须显式的使用this.变量
的方式,表明此变量是属性,而非形参。
我们在类的构造器中,可以显式的使用
this(形参列表)
的方式,调用本类中指定的其它构造器。
构造器中不能通过
this(形参列表)
方式调用自身的构造器。
如果一个类中有n个构造器,则最多有 n - 1个构造器中使用了
this(形参列表)
规定:
this(形参列表)
必须声明在当前构造器的首行。
构造器内部,最多只能声明一个
this(形参列表)
,用来调用其它的构造器。
除构造器之外,编译器禁止在其它任何方法中调用构造器。
代码演示:
class Person{ // 定义Person类 private String name ; private int age ; public Person(){ // 无参构造器 System.out.println("新对象实例化") ; } public Person(String name){ this(); // 调用本类中的无参构造器 this.name = name ; } public Person(String name,int age){ this(name) ; // 调用有一个参数的构造器 this.age = age; } public String getInfo(){ return "姓名:" + name + ",年龄:" + age ; } }
3.3 返回当前对象
代码演示:
public class Leaf { int i = 0; Leaf increment(){ i++; return this; } void print(){ System.out.println("i = "+i); } public static void main(String args[]){ Leaf x = new Leaf(); x.increment().increment().increment().print();//i = 3 }}
二、“ super ”关键字的使用
1. 概述
(1)
super
理解为:父类的
(2)在Java类中使用super来调用父类中的指定操作:
super
可用于访问父类中定义的属性。
super
可用于调用父类中定义的成员方法。super
可用于在子类构造器中调用父类的构造器。
尤其当子父类出现同名成员时,可以用super
表明调用的是父类中的成员,super
的追溯不仅限于直接父类。super
和this
的用法相像,this
代表本类对象的引用,super
이
키워드를 사용하여 속성, 메서드 및 생성자를 수정하고 호출할 수 있습니다. this
키워드는 메소드 내에서만 사용할 수 있습니다. 메소드 내에서 사용됩니다. 즉, 이 메소드가 속한 객체에 대한 참조입니다.
생성자 내에서 사용되며 생성자가 초기화하는 객체를 나타냅니다.
3. 🎜🎜이 키워드를 언제 사용해야 할까요? 🎜🎜🎜🎜🎜메서드 내에서 해당 메소드를 호출하는 객체를 사용해야 할 경우에는이것
을 사용하세요. 구체적으로는this
를 사용하여 속성과 지역 변수를 구분할 수 있습니다. 예:this.name = name;
🎜🎜3.1 수정 속성 및 메서드
🎜🎜this
는 현재 개체 또는 개체로 이해됩니다. 현재 생성 중인
클래스 메서드에서this.property
또는this.method
를 사용하여 현재 개체의 속성이나 메서드를 호출할 수 있습니다. 그러나 일반적으로this.
를 생략합니다. 특별한 경우, 메소드의 형식 매개변수가 클래스의 속성과 동일한 이름을 갖는 경우this.variable
을 명시적으로 사용하여 변수가 형식 매개변수가 아닌 속성임을 나타내야 합니다.this
를 사용하여 속성과 메서드에 액세스할 때 이 클래스에 없으면 상위 클래스에서 검색됩니다. 🎜🎜🎜🎜코드 데모: 🎜🎜public class Person { private String name; private int age; private Date birthDate; public Person(String name, int age, Date d) { this.name = name; this.age = age; this.birthDate = d; } public Person(String name, int age) { this(name, age, null); } public Person(String name, Date d) { this(name, 30, d); } public Person(String name) { this(name, 30); } }public class Student extends Person { private String school; public Student(String name, int age, String s) { super(name, age); school = s; } public Student(String name, String s) { super(name); school = s; }// 编译出错: no super(),系统将调用父类无参数的构造器。 public Student(String s) { school = s; } }로그인 후 복사로그인 후 복사3.2 생성자 호출
🎜🎜 클래스 생성자에서this.property
또는this.method를 사용할 수 있습니다.
메소드를 사용하여 현재 생성 중인 객체의 속성이나 메소드를 호출합니다. 그러나 일반적으로this.
를 생략합니다. 특별한 경우, 생성자의 형식 매개변수가 클래스의 속성과 동일한 이름을 갖는 경우this.variable
을 명시적으로 사용하여 변수가 형식 매개변수가 아닌 속성임을 나타내야 합니다. 🎜🎜🎜🎜클래스 생성자에서이(형식 매개변수 목록)
를 명시적으로 사용하여 이 클래스에 지정된 다른 생성자를 호출할 수 있습니다. 🎜🎜🎜🎜생성자는this(형식 매개변수 목록)
메서드를 통해 자체 생성자를 호출할 수 없습니다. 🎜🎜🎜🎜 클래스에 n개의 생성자가 있는 경우 는 최대 n - 1을 가질 수 있습니다. 🎜이 (공식 매개변수 목록)
가 생성자에 사용됩니다. 🎜🎜🎜🎜 규정:이(정식 매개변수 목록)
는 현재 생성자🎜의 첫 번째 줄에 선언되어야 합니다. 🎜🎜🎜🎜 생성자 내에서 는 다른 생성자를 호출하는 데 사용되는 최대 하나의this(형식 매개변수 목록)
만 선언할 수 있습니다. 🎜🎜🎜🎜 생성자를 제외하고 컴파일러는 다른 메서드에서 생성자를 호출하는 것을 금지합니다. 🎜🎜🎜🎜코드 데모: 🎜🎜rrreee3.3 현재 객체 반환
🎜🎜코드 데모: 🎜🎜rrreee🎜 2. "super" 키워드 사용 🎜🎜🎜1 개요🎜🎜🎜🎜( 1)super
는 다음과 같이 이해됩니다: 상위 클래스의 🎜🎜🎜🎜 (2) Java 클래스에서 super를 사용하여 상위 클래스에서 지정된 작업을 호출합니다:super 상위 클래스에 정의된 <span style="color:red"> 속성 🎜에 액세스하는 데 사용할 수 있습니다. 🎜🎜<code>super
는 상위 클래스에 정의된 멤버 메서드🎜를 호출하는 데 사용할 수 있습니다.super
는 하위 클래스 생성자에서 상위 클래스의 생성자🎜를 호출하는 데 사용할 수 있습니다.
특히 동일한 이름을 가진 멤버가 하위 또는 상위 클래스에 나타나는 경우super
를 사용하여 상위 클래스의 멤버를 호출하고 있음을 나타낼 수 있습니다. super는 직계 부모 클래스에만 국한되지 않습니다.super
는this
와 유사합니다.this
는 이 클래스의 객체에 대한 참조를 나타내고super
는 클래스의 메모리 공간 식별자를 나타냅니다. 🎜🎜🎜2. 🎜🎜🎜을 사용하여 하위 클래스에서 상위 클래스의 구조를 명시적으로 호출합니다. 🎜
3.使用
3.1 调用属性和方法
我们可以在子类的方法或构造器中。通过使用"
super.属性
“或”super.方法
“的方式,显式的调用父类中声明的属性或方法。但是,通常情况下,我们习惯省略”super.
"。
当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显式的使用"
super.属性
"的方式,表明调用的是父类中声明的属性。
当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用"
super.方法
"的方式,表明调用的是父类中被重写的方法。
3.2 调用构造器
(1)子类中所有的构造器默认都会访问父类中空参数的构造器。
(2)当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器,否则编译出错。同时,只能”二选一”,不能同时出现,且必须放在构造器的首行。
(3)在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)",调用父类中的构造器。
代码演示:
public class Person { private String name; private int age; private Date birthDate; public Person(String name, int age, Date d) { this.name = name; this.age = age; this.birthDate = d; } public Person(String name, int age) { this(name, age, null); } public Person(String name, Date d) { this(name, 30, d); } public Person(String name) { this(name, 30); } }public class Student extends Person { private String school; public Student(String name, int age, String s) { super(name, age); school = s; } public Student(String name, String s) { super(name); school = s; }// 编译出错: no super(),系统将调用父类无参数的构造器。 public Student(String s) { school = s; } }
三、this和super的区别
No. | 区别点 | this | super |
---|---|---|---|
1 | 访问属性 | 访问本类中的属性,如果本类没有此属性则从父类中继续查找 | 直接访问父类中的属性 |
2 | 调用方法 | 访问本类中的方法,如果本类没有此方法则从父类中继续查找 | 直接访问父类中的方法 |
3 | 调用构造器 | 调用本类构造器,必须放在构造器的首行 | 调用父类构造器,必须放在子类构造器的首行 |
四、子类对象实例化的全过程
(1)从结果上来看:(继承性)
子类继承父类以后,就获取了父类中声明的属性或方法。
创建子类的对象,在堆空间中,就会加载所有父类中声明的属性。
(2)从过程上来看:
当我们通过子类的构造器创建子类对象时,我们一定会直接或间接的调用其父类的构造器,进而调用父类的父类的构造器,…直到调用了java.lang.Object
类中空参的构造器为止。正因为加载过所有的父类的结构,所以才可以看到内存中有父类中的结构,子类对象才可以考虑进行调用。
(3)明确:虽然创建子类对象时,调用了父类的构造器,但是自始至终就创建过一个对象,即为
new
的子类对象。
推荐学习:《java视频教程》
위 내용은 Java의 this 및 super 키워드에 대한 상세 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
