이 글에서는 super에 대한 사전 이해, super(실제 매개변수)의 사용법, super를 생략할 수 없는 경우 등 super 키워드와 관련된 문제를 주로 정리한 java에 대한 관련 지식을 제공합니다. 아래 내용이 모두에게 도움이 되기를 바랍니다.
추천 학습: "java video tutorial"
super는 키워드이며 모두 소문자입니다.
Super와 this는 모두 인스턴스 메서드에 표시되고 "this/super()"는 생성자에 표시됩니다.
this:
(1) This는 인스턴스 메서드와 생성자에 표시될 수 있습니다. 방법으로.
(2) this의 구문은 "this.", "this()"입니다.
(3) This는 정적 메서드에서 사용할 수 없습니다.
(4) 이는 대부분의 경우 생략 가능합니다.
(5) 언제 생략할 수 없나요? 지역변수와 인스턴스변수를 구분할 때 생략할 수 없습니다. ~ (6) this()는 생성 메소드의 첫 번째 줄에만 나타날 수 있으며, 현재 생성 메소드를 사용하여 "이 클래스"에서 다른 생성 메소드를 호출하는 것이 목적입니다. 는: 코드 재사용입니다!super:
(1) super는 인스턴스 메서드 및 생성자에 나타날 수 있습니다. (2) super 구문은 "super.", "super()"입니다.
(3) Super는 정적 메서드에서 사용할 수 없습니다.
(4) super는 대부분 생략 가능합니다.
(5) super. 생략할 수 없는 경우는 언제인가요?
(6)
super()는 생성자 메서드의 첫 번째 줄에만 나타날 수 있습니다. 현재 생성자 메서드를 사용하여 "상위 클래스"에서 생성자 메서드를 호출하는 목적은 다음과 같습니다. 부모 유형의 특징
super()는 하위 클래스의 생성자를 통해 상위 클래스의 생성자를 호출하는 것을 의미합니다.
현실 세계에서 이 시나리오를 시뮬레이션해 보세요. 아들을 갖고 싶다면 먼저 아버지가 있어야 합니다. 중요한 결론: 생성자 메서드의 첫 번째 줄:
this()도 super()도 없으면 기본적으로 super()가 있습니다.
은 생성자를 통해 상위 클래스가 호출된다는 의미입니다. 현재 하위 클래스 매개변수 없는 생성자의 메서드입니다. 따라서 保은 상위 클래스 비매개변수 구조 메소드가 존재하는지 확인해야 합니다.
참고:
this()와 super()는 공존할 수 없으며 생성자의 첫 번째 줄에만 나타날 수 있습니다. 무엇을 하든 부모 클래스의 생성 방식은 반드시 실행됩니다. (100%)
super의 초기 이해
예제 1: 상위 클래스와 하위 클래스 모두 매개변수 없는 구성입니다.
1 2 3 |
|
상위 클래스는 매개변수로 구성되고 하위 클래스는 매개변수 없이 구성됩니다. 하위 클래스가 상위 클래스의 생성자를 호출하도록 하려면 super 키워드를 작성하고 이 방법으로만 해당 매개변수를 가져와야 합니다. 상위 클래스의 생성자가 호출됩니다. 매개변수 생성 방법이 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
예 4: 마트료시카 인형 예 이해하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public
class
Test01{
public
static
void main(String[] args){
//根据无参构造方法创建对象,肯定会调用无参构造方法!
new
B();
}
}
class
A{
// 一个类如果没有手动提供任何构造方法,系统会默认提供一个无参数构造方法。
// 一个类如果手动提供了一个构造方法,那么无参数构造系统将不再提供。
public
A(int i){
//有参构造方法
System.out.println(
"调用A的有参构造方法!"
);
}
}
class
B
extends
A{
public
B(){
//无参构造方法
// 父类是有参构造方法,此时默认是是super()就会有问题,
因为super()只能调用父类无参的无参构造方法
// 所以此时的super就不能省略;并且写上时要写上参数,
调用父类的有参构造方法,例如:super(100)
super(100);
System.out.println(
"调用B的无参构造方法!"
);
}
}
//结果:我们只创建B对象;结果确实先调用A类的构造方法,才调用B类的构造方法
/*
调用A的有参构造方法!
调用B的无参构造方法!
*/
로그인 후 복사
Java 언어에서는 어떤 객체이든 새로운 객체입니다. , 결국
조상의 Object 클래스의 매개변수 없는 생성자는 반드시 실행될 것입니다
. (Object 클래스의 매개변수 없는 생성자는 "스택의 상단"에 있습니다)스택 상단의 특징: 마지막에 호출되지만 먼저 실행됩니다. 후입선출 원칙. 모두가 참고해야 할 사항: 나중에 코드를 작성할 때는 매개변수 없는 클래스 생성 방법을 수동으로 작성하는 것이 좋습니다. 매개변수 없는 생성자가 손실되면 "하위 클래스 객체 생성"에 영향을 미칠 수 있습니다.
스택을 밀고 터뜨리는 과정입니다. 먼저 들어간 메소드는 스택의 맨 아래로 푸시되고 마지막으로 나오는 메소드는 스택의 맨 위로 푸시되어 나옵니다. 먼저 나오고 super() 키워드 때문에 마지막으로 부모 클래스가 스택의 맨 위에 있어야 하며 먼저 나와야 합니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
在恰当的时间使用:super(实际参数列表);
注意:在构造方法执行过程中一连串调用了父类的构造方法,父类的构造方法又继续向下调用它的父类的构造方法,但是实际上对象只创建了一个!思考:“super(实参)”到底是干啥的?
super(实参)的作用是:初始化当前对象的父类型特征。并不是创建新对象。实际上对象只创建了1个。
super关键字代表什么?
(1)super关键字代表的就是“当前对象”的那部分父类型特征!(2)我继承了我父亲的一部分特征:
例如:眼睛、皮肤等;super代表的就是“眼睛、皮肤等”。
“眼睛、皮肤等”虽然是继承了父亲的,但这部分是在我身上呢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
|
内存图(重点掌握)
对于这个内存图,我们要先理解:
(1)要创建CreditAccount对象,调用无参构造方法,默认有super()会调用它的父类Account;Account的无参构造又默认有super()会调用它的父类Object;
(2)根据栈的特点:后进先出,先开辟Object空间、然后开辟Account空间并把里面的实例变量actno和balance进行初始化、最终才开辟CreditAccount对象的空间并把实例变量credit进行初始化;并且有this指向当前对象的地址;有super指向当前对象的父类特征!
this表示当前对象。
super表示的是当前对象的父类型特征。(super是this指向的那个对象中的一块空间。)super和this都不能出现在静态方法中!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
内存图
this实际上包含着super;this不能使用在static里,所以super更不能!
“this.”和“super.”大部分情况下都是可以省略的。
this. 什么时候不能省略?
1
2
3
public
void setName(String name){
this.name = name;
}
로그인 후 복사super. 什么时候不能省略?
java中允许在子类中出现和父类一样的同名变量/同名属性。
父中有,子中又有,如果想在子中访问“父的特征”,super. 不能省略。java是怎么来区分子类和父类的同名属性的?
this.name:当前对象的name属性
super.name:当前对象的父类型特征中的name属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
|
内存图
this输出“引用”的时候,会自动调用引用的toString()方法;而super使用后面必须跟一个.,但是super.不是引用,不会自动调用toString()方法!
super 不是引用。super也不保存内存地址,super也不指向任何对象。
super 只是代表当前对象内部的那一块父类型的特征。this和super都不能使用在static静态方法中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
在父和子中有同名的属性,或者说有相同的方法,
如果此时想在子类中访问父中的数据,必须使用“super.”加以区分。super.属性名 【访问父类的属性】;super.方法名(实参) 【访问父类的方法】;在子类的实例属性/方法当中调用父类的实例属性/方法
super(实参) 【调用父类的构造方法】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
最后小结:super关键字
super能出现在实例方法和构造方法中。
super的语法是:“super.”、“super()”
super不能使用在静态方法中。
super. 大部分情况下是可以省略的。
super.什么时候不能省略呢?
父类和子类中有同名属性,或者同样的方法,想在子类中访问父类的,super. 不能省略。
super() 只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的构造方法,目的是:创建子类对象的时候,先初始化父类型特征。
super的使用:
(1)super.属性名 【访问父类的属性】
(2)super.方法名(实参) 【访问父类的方法】
(3)super(实参) 【调用父类的构造方法】
推荐学习:《java视频教程》
위 내용은 Java의 super 키워드 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!