super 關鍵字
含義
super : 超級的
含義: 在Java中代表當前對象的 直接父類對象的引用
用法分類
super.
super(實際參數)
1、super(實際參數)
super():代表調⽤⽗類⽆參的構造
super(參數):調⽤⽗類有參的構造
作用: 在⼦類構造⽅法中調⽤⽗類的構造⽅法
特點:
1.如果⼦類構造⽅法中的第⼀⾏沒有this()或者this(參數),也不是super(參數) 默認是
super(),構造⽅法的第⼀⾏不是this(...)就是super(...)
2.super()和super(參數)只能在構造⽅法的第⼀⾏
注意: super()和super(參數)只能⽤在⼦類的構造⽅法中
案例:
package com.ujiuye.day09;
public class Demo10 {
public static void main(String[] args) {
//Sub sub = new Sub();
Sub sub = new Sub(10,20);
// 在定義一個類的時候 如果已經定義了有參構造 在開發中一般要將無參數的構造方法補出來
}
}
// 定義一個父類
class Super{
int a;
int b;
//將構造
public Super(){
System.out.println("我是父類無參數的構造方法");
}
public Super(int a, int b) {
System.out.println("我是父類有參數的構造方法");
this.a = a;
this.b = b;
}
}
//定義一個子類
class Sub extends Super{
int c;
int d;
//構造方法
public Sub(){
super(11,22);
System.out.println("我是子類的無參數的構造方法");
}
public Sub(int c, int d) {
super(11,22);
System.out.println("我是子類的有參數的構造方法");
this.c = c;
this.d = d;
}
}
案例2:
package com.ujiuye.day09;
public class Demo10 {
public static void main(String[] args) {
//Sub sub = new Sub();
Sub sub = new Sub(10,20);
// 在定義一個類的時候 如果已經定義了有參構造 在開發中一般要將無參數的構造方法補出來
}
}
// 定義一個父類
class Super{
int a;
int b;
//將構造
public Super(){
System.out.println("我是父類無參數的構造方法");
}
public Super(int a, int b) {
System.out.println("我是父類有參數的構造方法");
this.a = a;
this.b = b;
}
}
//定義一個子類
class Sub extends Super{
int c;
int d;
//構造方法
public Sub(){
super();
System.out.println("我是子類的無參數的構造方法");
}
public Sub(int c, int d) {
this();
System.out.println("我是子類的有參數的構造方法");
this.c = c;
this.d = d;
}
}
案例3:
package com.ujiuye.day09;
public class Demo10 {
public static void main(String[] args) {
//Sub sub = new Sub();
Sub sub = new Sub(10,20);
// 在定義一個類的時候 如果已經定義了有參構造 在開發中一般要將無參數的構造方法補出來
}
}
class YeYe{
public YeYe(){
System.out.println("我是yeye的構造方法");
}
}
// 定義一個父類
class Super extends YeYe{
int a;
int b;
//將構造
public Super(){
super();
System.out.println("我是父類無參數的構造方法");
}
public Super(int a, int b) {
System.out.println("我是父類有參數的構造方法");
this.a = a;
this.b = b;
}
}
//定義一個子類
class Sub extends Super{
int c;
int d;
//構造方法
public Sub(){
super();
System.out.println("我是子類的無參數的構造方法");
}
public Sub(int c, int d) {
this();
System.out.println("我是子類的有參數的構造方法");
this.c = c;
this.d = d;
}
}
2、super .
作用: 區分 直接父類中和子類中重名的成員(成員變量和成員方法)
案例:
package com.ujiuye.day09;
public class Demo10 {
public static void main(String[] args) {
Sub sub = new Sub();
sub.m();
}
}
class YeYe{
int b = 1;
}
// 定義一個父類
class Super extends YeYe{
int b = 10;
public int m1(){
return super.b;
}
}
//定義一個子類
class Sub extends Super{// sub中有3個 b 成員變量
int b = 20;
public void m(){
int b = 30;
//System.out.println(b);
//System.out.println(this.b);
System.out.println(super.b);//super 指代 當前子類的直接父類對象的引用
System.out.println(super.b);
int i = m1();
System.out.println(i);
}
}
案例2:
package com.ujiuye.day09;
public class Demo10 {
public static void main(String[] args) {
Sub sub = new Sub();
sub.m2();
}
}
// 定義一個父類
class Super{
public void m1(){
System.out.println("我是父類中的m1方法");
}
}
//定義一個子類
class Sub extends Super{// sub中有3個 b 成員變量
@Override
public void m1(){
System.out.println("我是子類重寫父類的m1方法");
}
public void m2(){
//this.m1();//this.m1()
super.m1();
}
}
總結
super: 當前類的直接父類對象的引用
1、super(實際參數):在子類的構造方法中 調用父類的構造方法
注意:
1. 只能用在構造方法中
2. 只能是構造方法的第一條有效語句
3. 如果一個構造方法的第一行不是 this() / this(實參) / super(實參),默認是super()
2、super. : 當子類中存在和父類同名的成員變量,需要使用super 指定父類的重名的成員變量.