* 1.super关键字用在构造方法中:
* 语法:super(实参);【通过子类的构造方法去调用父类的构造方法】
* this(实参);【通过一个构造方法去调用另一个构造方法,实现代码重用,调用当前对象的构造方法】
*
* 2.语法规则:一个构造方法第一行如果没有this();也没有显示的去调用super();
* 系统会默认调用super();并且是一级一级往父类去调用
*
* 3.注意:super();的调用只能放在构造方法的第一行,和this();的调用规则一样
*
* super()和this()不能共存在同一个构造函数内
*
* 构造方法的第一行如果什么都不写的话就会默认调用父类的无参数构造方法【super();】
*
* 4.通过子类的构造方法去调用父类的构造方法,作用是:给当前子类对象中的父类型特征赋值
* super(值1,值2.....);
*
* 5.super();调用了父类中的构造方法,但是不会创建父类对象 ,只是为了给当前子类对象中的父类型特征赋值
*
* 6.为什么super();不会创建对象呢?
* 按道理来说,一个类我们只会给它实现一个对象,但是如果继承过来的东西也实例化的话,相当于实例化了Object,实例化Account,
* 实例化当前对象,一共有三个对象,这样会导致混乱
*
* 7.因此:构造方法执行,不一定创建对象【这个的意思指的是super关键字的意思】
*
* 8.父类的构造方法并不会被子类继承,但是可以被子类去调用
*
*
*
*
定义一个 Account类:
package com.lbj.javase15;
public class Account extends Object{//这里隐藏调用了Object类
private String actno;
private double balance;
public Account() {
//这里即使是缺写super();系统也会调用Object的无参构造方法去执行
System.out.println("无参数构造器");
}
public Account(String actno, double balance) {
this.actno = actno;
this.balance = balance;
}
public String getActno() {
return actno;
}
public void setActno(String actno) {
this.actno = actno;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
定义一个DebitAccount类 继承extends Account类:
package com.lbj.javase15;
/**
*
* 1.super关键字用在构造方法中:
* 语法:super(实参);【通过子类的构造方法去调用父类的构造方法】
* this(实参);【通过一个构造方法去调用另一个构造方法,实现代码重用,调用当前对象的构造方法】
*
* 2.语法规则:一个构造方法第一行如果没有this();也没有显示的去调用super();
* 系统会默认调用super();并且是一级一级往父类去调用
*
* 3.注意:super();的调用只能放在构造方法的第一行,和this();的调用规则一样
*
* super()和this()不能共存在同一个构造函数内
*
* 构造方法的第一行如果什么都不写的话就会默认调用父类的无参数构造方法【super();】
*
* 4.通过子类的构造方法去调用父类的构造方法,作用是:给当前子类对象中的父类型特征赋值
* super(值1,值2.....);
*
* 5.super();调用了父类中的构造方法,但是不会创建父类对象 ,只是为了给当前子类对象中的父类型特征赋值
*
* 6.为什么super();不会创建对象呢?
* 按道理来说,一个类我们只会给它实现一个对象,但是如果继承过来的东西也实例化的话,相当于实例化了Object,实例化Account,
* 实例化当前对象,一共有三个对象,这样会导致混乱
*
* 7.因此:构造方法执行,不一定创建对象【这个的意思指的是super关键字的意思】
*
* 8.父类的构造方法并不会被子类继承,但是可以被子类去调用
*
*
*
*
*
* @author 14811
*
*/
public class DebitAccount extends Account {
//独有属性
private double debit;
public DebitAccount(String actno,double balance,double debit) {
super(actno,balance);
this.debit = debit;
}
public DebitAccount() {
//super("001",1000.0);//这里调用的是父类的有参数的构造函数
//报错super();//单纯调用无参构造函数的时候这里即使不写也会自动存在
//报错super("001",1000.0);
}
public double getDebit() {
return debit;
}
public void setDebit(double debit) {
this.debit = debit;
}
}
定义一个测试类:
package com.lbj.javase15;
/**
*
* 1.super不是引用类型(this是引用类型,引用的是当前对象),super中存储的不是内存地址,super指向的不是父类对象
*
* 2.super代表的是当前子类对象中的父类型特征
*
* 3.什么时候使用super?
* 子类和父类中都有某个数据,
* 例如:子类和父类中都有name这个属性
* 如果要在子类中访问父类中的name属性,需要使用super关键字
*
* 4.super可以使用在什么地方?
* 第一:super可以用在成员方法中,不能用在静态方法中
* 第二:super可以用在构造方法中
*
* 5.this和super相同,都不能用在静态上下文中(static)
*
*
* @author 14811
*
*/
public class Test {
public static void main(String[] args) {
DebitAccount da=new DebitAccount();
da.
}
}