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