Javaのsuperキーワード
ステップ1:明示的に引数なしのコンストラクタを提供する親クラスを準備します
引数なしで準備明示的に提供親クラスのコンストラクタがある
オブジェクトがヒーローをインスタンス化されるとき、コンストラクタが印刷されます
「コンストラクタヒーロー」
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:親が明示的に2つのコンストラクタを提供しました
彼らは、コンストラクタとパラメータと引数なしのコンストラクタです
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:サブクラスでは、明示的に参照して、親クラスのコンストラクタを呼び出します
明示的にパラメータを指定して親クラスを呼び出すキーワードスーパーコンストラクタを使用します
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:親クラスのプロパティを呼び出します
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 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();
}
}
運動:スーパー
ヒーローの親クラスのコンストラクタ引数を提供します。
public Hero(String name){
this.name = name;
}
しかし、それは、引数なしのコンストラクタを提供していませんでした
サブクラスに対処する方法をすべきですか?
package charactor;
public class Hero {
public String name;
protected float hp;
public Hero(String name){
this.name = name;
}
// 故意不提供无参的构造方法
// public Hero(){
//
// }
public static void main(String[] args) {
}
}