抽象クラス
Heroの抽象メソッド攻撃を追加し、Heroを抽象として宣言します。
APHero、ADHero、およびADAPHeroは、Heroのサブクラスであり、Heroの属性とメソッドを継承します。
ただし、攻撃方法は異なるため、Heroクラスを継承した後、これらのサブクラスは異なる攻撃方法の実装を提供する必要があります。
public abstract class hero implements AD{
String name;
int hp;
int movespeed = 1000;
int armor;
public abstract void attack(); // 抽象方法attack
// Hero的子类会被要求实现attack方法
抽象クラスは抽象メソッドを持つことができません
Heroクラスは、抽象メソッドを提供せずに抽象クラスとして宣言できます。
クラスが抽象クラスとして宣言されると、直接インスタンス化することはできません。
public abstract class hero {
public static void main(String args[]){
hero a = new hero(); //这样会报错
}
}
抽象クラスとインターフェースの違い
違い1:
サブクラスは1つの抽象クラスのみを継承でき、複数の
サブクラスは複数のインターフェイスを実装できません
違い1:
サブクラスは1つの抽象クラスのみを継承でき、複数の
サブクラスは複数のインターフェイスを実装できません
違い2:
抽象クラスは
public、protected、package、private
staticおよびnon-staticプロパティ
finalおよびnon-finalプロパティを定義できます
が、インターフェイスでは宣言されています明示的な宣言がない場合でも、属性は
public
staticfinalのみにすることができます
注:抽象クラスとインターフェースの両方にエンティティーメソッドを含めることができます。デフォルトメソッドと呼ばれる、インターフェイスのエンティティメソッド
package charactor;
public interface AP {
public static final int resistPhysic = 100;
//resistMagic即便没有显式的声明为 public static final
//但依然默认为public static final
int resistMagic = 0;
public void magicAttack();
}
エクササイズ-アブストラクト⭐⭐⭐
血液ボトルなど、使用後に消えるアイテムがあります
武器など、使用後も存在し続けるアイテムもあります
Itemクラスの抽象メソッドを設計する
package charactor;
public abstract class item {
public void effect() {
System.out.println("使用后可以加血");
}
public abstract void disposable();
}
package charactor;
public class weapon extends item{
public void disposable() {
panduan();
}
public boolean panduan() {
return false;
}
}
package charactor;
public class armor extends item{
public boolean pd() {
return false;
}
public void disposable() {
pd();
}
}