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原理图:
文章图片
super(实参)到底是干嘛的?
super(实参)的作用是:初始化当前对象的父类型特征。
并不是创建新对象,对象只创建了一个,只是在继承父类型特征。
super关键字代表什么
【JAVA笔记|Java——super关键字】super关键字代表的就是“当前对象” 的那部分父类型特征。
例如:我继承了我父亲的眼睛,鼻子等特征
super代表的就是“眼睛、鼻子”等特征。
而“眼睛、鼻子”虽然继承父亲的但这部分在我身上。
This . 和 Super . 什么时候不能省略
this . 什么时候不能省略:
public void setName(String name){super . 什么时候不能省略:
this.name = name;
}
父中有,子中又有,如果想在子中访问“父的特征”,super . 不能省略。
super和this直接使用上的区别
super不是引用。super也不保存内存地址,super也不指向任何对象。
super只是代表“当前对象” 的那部分父类型特征。
System.out.println( this ); //编译通过
System.out.println( super ); //编译报错
在父和子中有同名的属性或是相同的方法,如果想在子类中访问父类中的数据,必须使用"super . "加以区分 。
super . 属性名:
super .方法名(实参)
super (实参)
推荐阅读
- JAVA笔记|Java——this关键字
- 编程习题集|JAVA-jmu-Java-03面向对象基础-04-形状-继承
- 分布式|分布式理论总览
- #|基于改进的蚂蚁群算法求解最短路径问题、二次分配问题、背包问题【Matlab&Python代码实现】
- Java|大厂面经分享(双非五面入职字节,他都做了哪些准备())
- 面试文|【面经分享】两年经验拿到PingCAP Offer
- 设计模式|GO 常用设计模式
- 大厂钟爱的全链路压测有什么意义(四种压测方案详细对比分析)
- java|Java 修饰符 private、default、protected、public 的应用实例 (属性)