JAVA笔记|Java——super关键字

1、super是关键字,全部小写。
2、super和this对比:
this:
this能出现在实例方法和构造方法中。
this的语法: “this.” 、 “this ()”
this不能使用在静态方法中。
this.大部分情况下可以省略,在区分局部变量和实例变量的时候不可省略。

public void setName(String name){
this.name = name;
}

this () 只能出现在构造方法第一行,通过当前的构造方法去调用“本类”中其他的构造方法,目的是:代码复用。
super:
super能出现在实例方法和构造方法中。
super的语法: “super.” 、 “super ()”
super不能使用在静态方法中。
super.大部分情况下可以省略,在区分局部变量和实例变量的时候不可省略。
super什么时候不能省略?
super () 只能出现在构造方法第一行,通过当前的构造方法去调用“父类”中的构造方法,目的是:代码复用。目的是:创建子类对象的时候,先初始化父类型特征。
3、super () 表示通过子类的构造方法调用父类的构造方法。模拟现实世界中这种场景:要想有儿子,先要有父亲。
4、重要结论:
当一个构造方法第一行:
既没有this()又没有super()的话,默认会有一个super();
表示通过当前子类构造方法调用父类的无参数构造方法。
所以必须保证父类的无参数构造方法是存在的。
5、this()和super()不共存。
6、无论怎样折腾,父类的构造方法是一定会执行的(100%)。
例题:分析下列程序执行结果
public class SuperTest02 { public static void main(String[] args) { new C(); }}class A { public A () { System.out.println("A类的无参数构造方法!"); //1 } }class B extends A { public B () { System.out.println("B类的无参数构造方法!"); //2 } public B(String name) { System.out.println("B类的有参数构造执行(String)"); //3 } }class C extends B{ public C() { this("zhangsan"); System.out.println("C的无参数构造执行!"); //4 } public C(String name) { this(name,20); System.out.println("C的有参数构造执行(String)"); //5 } public C(String name,int age) { super(name); System.out.println("C的有参数构造执行(String,int)"); //6 } }

结果为: 13654;
在恰当的时候使用 super (实际参数列表);
例:
public class Account { private String actnum; private double balance; //余额 public Account() { } public Account(String actnum, double balance) { this.actnum = actnum; this.balance = balance; } public String getActnum() { return actnum; } public void setActnum(String actnum) { this.actnum = actnum; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } }

public class CreditAccount extends Account{ private double credit; public CreditAccount() { } public double getCredit() { return credit; } public void setCredit(double credit) { this.credit = credit; } }

以上Account类已被封装好,在外部不能对actnum和balance进行赋值修改
为了能在CreditAccount中进行一步到位赋值操作,可以在CreditAccount类中使用super (); 实现
public CreditAccount(String actnum, double balance, double credit) { super(actnum, balance); this.credit = credit; }

public static void main(String[] args) {CreditAccount ca2 = new CreditAccount("111",10000.0,0.99); System.out.println(ca2.getActnum() + ca2.getBalance() + ca2.getCredit()); }

Super原理图:
JAVA笔记|Java——super关键字
文章图片

super(实参)到底是干嘛的?
super(实参)的作用是:初始化当前对象的父类型特征。
并不是创建新对象,对象只创建了一个,只是在继承父类型特征。
super关键字代表什么
【JAVA笔记|Java——super关键字】super关键字代表的就是“当前对象” 的那部分父类型特征。
例如:我继承了我父亲的眼睛,鼻子等特征
super代表的就是“眼睛、鼻子”等特征。
而“眼睛、鼻子”虽然继承父亲的但这部分在我身上。
This . 和 Super . 什么时候不能省略
this . 什么时候不能省略:
public void setName(String name){
this.name = name;
}
super . 什么时候不能省略:
父中有,子中又有,如果想在子中访问“父的特征”,super . 不能省略。
super和this直接使用上的区别
super不是引用。super也不保存内存地址,super也不指向任何对象。
super只是代表“当前对象” 的那部分父类型特征。
System.out.println( this ); //编译通过
System.out.println( super ); //编译报错
在父和子中有同名的属性或是相同的方法,如果想在子类中访问父类中的数据,必须使用"super . "加以区分 。
super . 属性名:
super .方法名(实参)
super (实参)

    推荐阅读