每日学习-Java基础(十)接口和继承6(super)

一、引入
1、实例化对象时自动调用无参构造方法

package ia6_super;

public class Hero {
	public String name; // 英雄名称
	protected float hp; // 血量
	protected float armor; // 盔甲
	protected int moveSpeed; // 移动速度
	
	public Hero() {
		System.out.println("Hero无参构造方法");
	}
	
	public static void main(String[] args) {
		new Hero();
	}
}

运行结果:
在这里插入图片描述
2、实例化子类对象时,先调用父类无参构造方法,再调用自身无参构造方法

package ia6_super;

public class ADHero extends Hero implements AD {

	@Override
	public void phsyicAttack() {
		// TODO Auto-generated method stub
		System.out.println("进行物理攻击");
	}

	public ADHero() {
		System.out.println("ADHero无参构造方法");
	}

	public static void main(String[] args) {
		new ADHero();
	}
}

运行结果:
在这里插入图片描述
二、super关键字
1、使用super调用父类构造方法。
下面例子:显式调用父类有参构造方法

package ia6_super1;

public class Hero {
	public String name; // 英雄名称
	protected float hp; // 血量
	protected float armor; // 盔甲
	protected int moveSpeed; // 移动速度
	
	public Hero() {
		System.out.println("Hero无参构造方法");
	}
	
	public Hero(String name) {
		this.name = name;
		System.out.println("Hero有参的构造方法");
	}
	
	public static void main(String[] args) {
		new Hero();
	}
}
package ia6_super1;

public class ADHero extends Hero implements AD{

	@Override
	public void phsyicAttack() {
		// TODO Auto-generated method stub
		System.out.println("进行物理攻击");
	}
	
	public ADHero() {
		System.out.println("ADHero无参构造方法");
	}
	
	public ADHero(String name) {
		super(name);
		this.name = name;
		System.out.println("ADHero有参构造方法");
	}
	
	public static void main(String[] args) {
		new ADHero("德莱文");
	}
}

运行结果:
在这里插入图片描述
2、使用super访问父类成员属性。
下面例子:获取父类移动速度

package ia6_super2;

public class ADHero extends Hero implements AD{

	int moveSpeed = 400;
	@Override
	public void phsyicAttack() {
		// TODO Auto-generated method stub
		System.out.println("进行物理攻击");
	}
	
	public ADHero() {
		System.out.println("ADHero无参构造方法");
	}
	
	public ADHero(String name) {
		super(name);
		this.name = name;
		System.out.println("ADHero有参构造方法");
	}
	
	public int getMoveSpeed() {
		return this.moveSpeed;
	}
	
	public int getFatherMoveSpeed() {
		return super.moveSpeed;
	}
	
	public static void main(String[] args) {
		ADHero ad = new ADHero("德莱文");
		System.out.println(ad.getMoveSpeed());
		System.out.println(ad.getFatherMoveSpeed());
	}
}

运行结果:
在这里插入图片描述
3、使用super访问父类成员方法。
下面例子:使用物品Item,LifePotion见链接
https://blog.csdn.net/weixin_41117393/article/details/103761622

package ia6_super3;

public class Hero {
	public String name; // 英雄名称
	protected float hp; // 血量
	protected float armor; // 盔甲
	protected int moveSpeed; // 移动速度
	
	public Hero() {
		System.out.println("Hero无参构造方法");
	}
	
	public Hero(String name) {
		this.name = name;
		System.out.println("Hero有参的构造方法");
	}
	
	public void useItem(Item i) {
		i.effect();
	}
	
	public static void main(String[] args) {
		new Hero();
	}
}
package ia6_super3;

public class ADHero extends Hero implements AD{

	//int moveSpeed = 400;
	@Override
	public void phsyicAttack() {
		// TODO Auto-generated method stub
		System.out.println("进行物理攻击");
	}
	
	public ADHero() {
		System.out.println("ADHero无参构造方法");
	}
	
	public ADHero(String name) {
		super(name);
		this.name = name;
		System.out.println("ADHero有参构造方法");
	}
	
	public int getMoveSpeed() {
		return this.moveSpeed;
	}
	
	public int getFatherMoveSpeed() {
		return super.moveSpeed;
	}
	
	public void useItem(Item i) {
		System.out.println("adHero use item");
		super.useItem(i);
	}
	
	public static void main(String[] args) {
		ADHero ad = new ADHero("德莱文");
		LifePotion lp = new LifePotion();
		ad.useItem(lp);
	}
}

运行结果:
在这里插入图片描述
三、练一练
问:如果父类不提供无参的构造方法,只提供有参的构造方法,子类构造方法怎么做?是否需要显示调用有参构造方法。子类实例化时程序如何执行?
提示:super("");

我的学习源泉:https://how2j.cn/k/interface-inheritance/interface-inheritance-super/311.html?p=114999
Java自学网站:https://how2j.cn?p=114999

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值