一、引入
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