准备一个显式提供无参构造方法的父类
package charactor;
public class hero implements AD{
String name;
int hp;
float movespeed;
int armor;
public void physicattack() {
System.out.println("物理攻击");
}
public void die() {
}
public void kill(hero i) {
i.die();
}
public static void battlewin() {
System.out.println("战斗胜利");
}
public void hero(item a) {
System.out.println("hero use item");
a.effect();
}
public static void main(String args[]) {
new hero();
}
}
实例化子类,父类的构造方法一定会被调用
实例化一个ADHero(), 其构造方法会被调用
其父类的构造方法也会被调用
并且是父类构造方法先调用
子类构造方法会默认调用父类的 无参的构造方法
package charactor;
public class adhero extends hero implements mortal,AD{
public adhero() {
System.out.println("我是adhero的构造方法");
}
public static void main(String args[]){
new adhero();
}
}
父类显式提供两个构造方法
分别是无参的构造方法和带一个参数的构造方法
package charactor;
public class hero implements AD{
String name;
int hp;
float movespeed;
int armor;
public hero() {
System.out.println("我是hero的构造方法");
}
public hero(String name) {
System.out.println("hero 的一个又参数的构造方法");
this.name = name;
}
子类显式调用父类带参构造方法
package charactor;
public class adhero extends hero implements mortal,AD{
public void physicattack(){
System.out.println("进行物理攻击");
}
public adhero() {
System.out.println("我是adhero的构造方法");
}
public static void main(String args[]){
new adhero();
new adhero("德玛西亚啦啦啦");
}
public adhero(String name) {
super(name);
System.out.println("这是一个带参数的构造方法");
}
调用父类属性
通过super调用父类的moveSpeed属性
ADHero也提供了属性moveSpeed
public int movespeed1() {
return this.movespeed1;
}
public int movespeed() {
return super.movespeed;
}
调用父类方法
ADHero重写了useItem方法,并且在useItem中通过super调用父类的useItem方法
public void useitem(item a) {
System.out.println("重写这个useitem方法");
super.useitem(a);
}
总结:
super 可以当作父类的 引用 来用
练习-super⭐⭐⭐
父类Hero提供了一个有参的构造方法
但是没有提供无参的构造方法
子类应该怎么处理?
//父类,hero类
public void useitem() {
System.out.println("hero use item");
item a = new item();
a.effect();
}
//子类,adhero类
public void useitem() {
System.out.println("重写这个useitem方法");
super.useitem();
}