1.显示提供无参构造方法的父类。
package superexercise;
import override.Item;
public class Hero {
String name;
float hp;
float armor;
int moveSpeed;
public void useItem(Item i){
System.out.println();
i.effect();
}
public Hero() {
System.out.println("Hero的构造方法");
}
public static void main(String[] args) {
}
}
2.实例化子类,父类的构造方法一定会被调用.
package superexercise;
public class ADHero extends Hero implements AD{
@Override
public void physicAttack() {
System.out.println("物理攻击");
}
public ADHero() {
System.out.println("ADHero的构造方法");
}
public static void main(String[] args) {
new ADHero();
}
}

3.父类显式提供两个构造方法
package superexercise;
import override.Item;
public class Hero1 {
String name;
float hp;
float armor;
int moveSpeed;
public Hero1() {
System.out.println("Hero的无参构造方法");
}
public Hero1(String name, float hp, float armor, int moveSpeed) {
System.out.println("Hero的有参构造方法");
this.name = name;
this.hp = hp;
this.armor = armor;
this.moveSpeed = moveSpeed;
}
public void useItem(Item i){
System.out.println("Hero use item");
i.effect();
}
public static void main(String[] args) {
new Hero1();
}
}
4.子类显式调用父类带参的构造方法
package superexercise;
import override.Item;
public class Hero1 {
String name;
float hp;
float armor;
int moveSpeed;
public Hero1() {
System.out.println("Hero的无参构造方法");
}
public Hero1(String name, float hp, float armor, int moveSpeed) {
System.out.println("Hero的有参构造方法");
this.name = name;
this.hp = hp;
this.armor = armor;
this.moveSpeed = moveSpeed;
}
public void useItem(Item i){
System.out.println("Hero use item");
i.effect();
}
public static void main(String[] args) {
new Hero1();
}
}
package superexercise;
public class ADHero1 extends Hero1 implements AD {
@Override
public void physicAttack() {
System.out.println("物理攻击");
}
public ADHero1(String name, float hp, float armor, int moveSpeed) {
super(name, hp, armor, moveSpeed);
}
public static void main(String[] args) {
new ADHero1("huahua",200,12,10);
}
}
5.调用父类属性
通过super调用父类的moveSpeed属性
ADHero也提供了属性moveSpeed
package superexercise;
public class ADHero2 extends Hero2 implements AD {
int moveSpeed=200;
@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) {
ADHero2 h=new ADHero2();
System.out.println(h.getMoveSpeed());
System.out.println(h.getMoveSpeed2());
}
}

6.调用父类方法
ADHero重写了useItem方法,并且在useItem中通过super调用父类的useItem方法
package superexercise;
import override.Item;
public class Hero3 {
String name;
float hp;
float armor;
int moveSpeed;
public Hero3() {
System.out.println("Hero3无参构造方法");
}
public void useItem(Item i){
System.out.println("lll");
i.effect();
}
public static void main(String[] args) {
new Hero3();
System.out.println("---");
}
}
package superexercise;
import override.Item;
public class ADHero3 extends Hero3 implements AD {
@Override
public void physicAttack() {
System.out.println("物理攻击");
}
//重写useitem,并在其中调用父类的useitem方法
public void useItem(Item i){
System.out.println("重写父类的方法");
super.useItem(i);
}
public static void main(String[] args) {
ADHero3 ad3=new ADHero3();
LifePotion lp=new LifePotion();
ad3.useItem(lp);
}
}
7.练习
父类Hero提供了一个有参的构造方法:
public Hero(String name){
this.name = name;
}
但是没有提供无参的构造方法
子类应该怎么处理?
package superexercise;
public class Hero4 {
public String name;
protected float hp;
public Hero4(String name) {
this.name = name;
}
// public Hero4() {
// }
public static void main(String[] args) {
new Hero4("大谷");
}
}
package superexercise;
public class ADHero4 extends Hero4 implements AD {
@Override
public void physicAttack() {
System.out.println("物理攻击");
}
public ADHero4(String name) {
super(name);
}
public ADHero4() {
super("");
}
public static void main(String[] args) {
ADHero4 ad4=new ADHero4("拉拉");
ad4.name="小灰灰";
}
}

140

被折叠的 条评论
为什么被折叠?



