super关键字
步骤1:准备一个显式提供无参构造方法的父类
步骤2:实例化子类,父类的构造方法一定会被调用
步骤3:父类显式提供两个构造方法
步骤4:子类显式调用父类带参构造方法
步骤5:调用父类属性
步骤6:调用父类方法
步骤7:练习-super
步骤8:答案-super
步骤 1 : 准备一个显式提供无参构造方法的父类
准备显式提供无参构造方法的父类
在实例化Hero对象的时候,其构造方法会打印
“Hero的构造方法 "
package charactor; import property.Item; public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public void useItem(Item i){ System.out.println( "hero use item" ); i.effect(); } public Hero(){ System.out.println( "Hero的构造方法 " ); } public static void main(String[] args) { new Hero(); } } |
步骤 2 : 实例化子类,父类的构造方法一定会被调用
实例化一个ADHero(), 其构造方法会被调用
其父类的构造方法也会被调用
并且是父类构造方法先调用
子类构造方法会默认调用父类的 无参的构造方法
package charactor; public class ADHero extends Hero implements AD{ @Override public void physicAttack() { System.out.println( "进行物理攻击" ); } public ADHero(){ System.out.println( "AD Hero的构造方法" ); } public static void main(String[] args) { new ADHero(); } } |
步骤 3 : 父类显式提供两个构造方法
分别是无参的构造方法和带一个参数的构造方法
package charactor; import property.Item; public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public void useItem(Item i){ System.out.println( "hero use item" ); i.effect(); } public Hero(){ System.out.println( "Hero的无参的构造方法 " ); } public Hero(String name){ System.out.println( "Hero的有一个参数的构造方法 " ); this .name = name; } public static void main(String[] args) { new Hero(); } } |
步骤 4 : 子类显式调用父类带参构造方法
使用关键字super 显式调用父类带参的构造方法
package charactor; public class ADHero extends Hero implements AD{ @Override public void physicAttack() { System.out.println( "进行物理攻击" ); } public ADHero(String name){ super (name); System.out.println( "AD Hero的构造方法" ); } public static void main(String[] args) { new ADHero( "德莱文" ); } } |
步骤 5 : 调用父类属性
通过super调用父类的moveSpeed属性
ADHero也提供了属性moveSpeed
public int getMoveSpeed(){ return this .moveSpeed; } public int getMoveSpeed2(){ return super .moveSpeed; } |
package charactor; public class ADHero extends Hero implements AD{ int moveSpeed= 400 ; //移动速度 @Override public void physicAttack() { System.out.println( "进行物理攻击" ); } public int getMoveSpeed(){ return this .moveSpeed; } public int getMoveSpeed2(){ return super .moveSpeed; } public static void main(String[] args) { ADHero h= new ADHero(); System.out.println(h.getMoveSpeed()); System.out.println(h.getMoveSpeed2()); } } |
步骤 6 : 调用父类方法
ADHero重写了useItem方法,并且在useItem中通过super调用父类的useItem方法
package charactor; import property.Item; import property.LifePotion; public class ADHero extends Hero implements AD { int moveSpeed = 400 ; // 移动速度 @Override public void physicAttack() { System.out.println( "进行物理攻击" ); } public int getMoveSpeed() { return this .moveSpeed; } public int getMoveSpeed2() { return super .moveSpeed; } // 重写useItem,并在其中调用父类的userItem方法 public void useItem(Item i) { System.out.println( "adhero use item" ); super .useItem(i); } public static void main(String[] args) { ADHero h = new ADHero(); LifePotion lp = new LifePotion(); } } |
更多内容,点击了解: https://how2j.cn/k/interface-inheritance/interface-inheritance-super/311.html