super关键字

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调用了父类的构造方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值