⭐⭐⭐Java基础篇目录⭐⭐⭐
🍁 第一章 Java开发环境搭建
🍁 第二章 标识符与关键字
🍁 第三章 变量
🍁 第四章 数据类型
🍁 第五章 运算符
🍁 第六章 控制语句
🍁 第七章 方法
🍁 第八章 认识面向对象
🍁 第九章 对象的创建和使用
🍁 第十章 封装
🍁 第十一章 this和static
🍁 第十二章 继承
🍁 第十三章 方法的覆盖和多态
🍁 第十四章 super
😉
1、super
复习this,并对比:
- this能出现在实例方法和构造方法中
- this的语法是this. 和this()
- this不能使用在静态方法中
- this在大部分情况下是可省略的
- this在区分局部变量和实例变量的时候不能省略,this.name = name;
- this()只能出现在构造方法的第一行,通过当前的构造方法调用
本类
的其他构造方法,目的是复用代码
对比this记忆super:
- super能出现在实例方法和构造方法中
- super的语法是super. 和super()
- super不能使用在静态方法中
- super.大部分情况下是可省略的
- super不能省略的情况见后面
- super()只能出现在构造方法的第一行,通过当前构造方法调用
父类
中的构造方法,目的是创建子类对象的时候,先初始化父类型特征
2、super()的用法
- super()表示通过子类中的构造方法调用父类的构造方法
- 当构造方法的第一行,既没有this(……)又没有super(……)的时候,默认会有一个super(),表示通过当前子类的构造方法调用父类的
无参
构造方法,所以必须保证父类中的无参构造方法是存在的- 既然this()和super()都只能出现在构造方法的第一行,那二者不会共存
3、super(实参)
先回顾一下继承:除了父类的构造方法无法继承,其余代码均可继承,但私有的不能直接访问。 那私有的如何访问?
答案是用super(实参)
/**
* 银行账户类
*/
public class Accounts {
private String actno;
private double balance;
public Accounts(){
}
public Accounts(String actno,double balance){
this.actno = actno;
this.balance = balance;
}
public String getActno(){
return this.actno;
}
public void setActno(String actno){
this.actno = actno;
}
public double getBalance(){
return this.balance;
}
public void setBalance(double balance){
this.balance = balance;
}
}
class CreditAccounts extends Accounts{
private double credit;
public CreditAccounts(){
}
public CreditAccounts(String actno, double balance, double credit){
super(actno,balance);
this.credit = credit;
}
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
}
super代表的是“当前对象的父类型特征”
super()实参的作用是:初始化当前对象的父类型特征,并不是创建新对象。
4、super不能省的情况
Java中允许在子类中出现和父类中一样的同名变量
,即同名属性,此时在子类中访问父类的该变量,super不能省略。
this.name访问当前对象的name属性
super.name 访问当前对象的父类中的name属性
虽然用法上this和super很相似,但需要注意的是,super就是个关键字,它不是引用,不保存对象内存地址,也不指向堆区中的对象。super只是代表当前对象内部的那一块父类型特征。
Test t = new Test();
//这是合法的,打印出类名@对象地址哈希后的十六进制
System.out.println(this);
//没这个操作
System.out.println(super);
5、super调用父类中的方法
super.属性名 —>访问父类中的属性
super.方法名(传参) —>调用父类中的方法
super()或者super(传参)—>调用父类中的构造方法
不变的是,私有变量想直接访问还是只能在本类。父类中的私有属性,即使你super.属性名也还是访问不了,但可以super.getter()
<完结>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146113.html