1.super不是引用类型,super中存储的不是内存地址,super指向的不是父类
2.super代表的是当前子类对象中的父类型特征
3.什么时候使用super?
子类和父类中都有某个数据,例如,子类和父类中都name这个属性。如果要在子类中访问父类 型中的属性。
4.super可以用在什么地方
第一:super可以用在成员方法中,不能用在静态方法中
第二:super可以用在构造方法中
5.联系单例模式,可以看到单例模式的缺点,单例模式没有子类,无法被继承
单例模式的类 无法被继承,因为单例模式需要将构造方法私有化,则子类无法通过super调用父类的构造方法。
//员工类
public class employee{
String name = 'zhangsan';
public void work(){
System.out.println("员工在上班");
}
}
经理类继承员工类的方法
public class manager extends emplyee{
String name = 'lisi';
public void work(){
System.out.println("经理在上班");//这里是将父类的方法重写了
}
public void m1(){
work(); //这里的work将调用在子类中重写的work
super.work();//如果想调用父类中的work方法,则需要用super关键字
System.out.println(this.name);
System.out.println(name);
System.out.println(super.name); //当子类中没有重写name时,三个输出都一样,当子类重写name之后, super后面将访问父类的name
}
/*
//this和super相同,都不能用在静态上下文中
public static void m1()
{
System.out.println(super.name);
}
*/
}
2.super 使用在构造方法当中
super关键字用在构造方法中:
语法:super(实参)
作用:通过子类的构造方法去调用父类的构造方法
语法规则:一个构造方法第一行如果没有this(…);也没有调用显示的去调用super(…)
系统会默认调用super();
注意:super(…);的调用只能放在构造方法的第一行
this()和super()是不能够共存的‘
super(..);调用了父类中的构造方法,但是并不会创建父类对象
在java语言中只要是创建java对象,那么 Object中的无参数构造方法一定会执行,创建一个类没有指定继承的 话 ,都是继承于Object类的
public class Account{
private actno;
private actname; // 私有类型无法继承
public Account(){
}
public Account(int no,String name)
{
this.actno = no;
this.actname = name;
}
}
public class DebitAccout{
private int grade;
public DebitAccount(){
super();//默认会有super
}
public DebitAccount(int no,String name,int degrade)
{
//以上有no和name,这两个是无法直接赋值的,因为私有类型无法继承,故用super调用父类构造方法
super(no,name); //这个super()不会创建对象,只会给子类中的父类型特征赋值
this grade = degrade;
}
}
以上可以看出父类的构造方法不支持继承,是子类通过super调用了父类的构造方法