インターフェース
LOLを設計する場合、攻撃的なヒーローには2つのタイプがあります。1つは物理攻撃用で、もう1つは魔法攻撃用です。
このとき、インターフェースを使用してこの効果を実現できます。
インターフェースは慣例のようなものです。特定のヒーローは物理ヒーローであると約束しているため、物理攻撃を実行できる必要があります(物理攻撃インターフェースを継承している場合)。
コード例:
public class Hero {//基类
public String name;
protected float hp;
}
public interface AD {
//物理伤害
public void physicAttack();
}
public class ADHero extends Hero implements AD{
//继承了 Hero类,且实现了AD接口
@Override
public void physicAttack() {
System.out.println("进行物理攻击");
}
}
インターフェイスを実装することは、特定の規則を約束することと同じです
したがって、ADインターフェイスを実装するには、ADインターフェイスで宣言されたメソッドphysicalAttack()を提供
して、構文にキーワードimplementsを実装する必要があります。
public interface AP {
public void magicAttack();
}
もちろん、2つのインターフェースを実装して、2つの攻撃機能を提供することもできます。
//同时能进行物理和魔法伤害的英雄
public class ADAPHero extends Hero implements AD,AP{
@Override
public void magicAttack() {
System.out.println("进行魔法攻击");
}
@Override
public void physicAttack() {
System.out.println("进行物理攻击");
}
}
オブジェクト変換
一般的に言って、転勤を強いられる必要のない人は間違いなく転勤することができます。
強制変換の場合、変換された型のメソッドが元の型にない場合、強制変換は失敗します。
リライト
サブクラスは、親クラスのオブジェクトメソッドを継承できます
継承後、メソッドを繰り返し提供することをメソッド書き換えと呼びます。
オーバーライド
ポリモーフィズム
演算子の多形「+」は、算術演算または文字列連結として使用できます。
ポリモーフィッククラスの
親クラスからサブクラスへのオブジェクト参照(実際には、メソッドで実装されたポリモーフィズムを書き換えるオブジェクトについて)
隠す
書き換えと同様に、メソッドの書き換えは、サブクラスが親クラスのオブジェクトメソッドをオーバーライドすることです。
非表示、つまり、サブクラスは親クラスのクラスメソッドをオーバーライドします
スーパーキーワード
インスタンス化ADHero()、その施工方法は、呼び出される
親の施工方法は、とも呼ばれます、
そして親の施工方法が呼び出されます最初の。
子供の施工方法は、うで親の無パラメータ構築メソッドを呼び出しデフォルト。
超明示的なInvokeを使用して、パラメータを使用して親クラスの構築メソッドを呼び出すことができます
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("德莱文");
}
}
スーパーを介して親クラスのmoveSpeedプロパティを呼び出すこともできます
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());
}
}
ADHeroはuseItemメソッドを書き換え、useItemのsuperを介して親クラスのuseItemメソッドを呼び出します
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();
}
}
オブジェクトクラス
オブジェクトクラスは、すべてのクラスの親クラスです
クラスを宣言する場合、デフォルトではObjectを継承します
ObjectクラスはtoStringメソッドを提供するため、すべてのクラスにtoStringメソッドがあります
。toString()は、現在のオブジェクトの文字列式を返すことを意味します。
オブジェクトへの参照がない場合は、ガベージコレクションの条件を満たすオブジェクトです。ガベージコレクションの
場合は、finalize()メソッドが呼び出されます。
finalize()は、開発者が積極的に呼び出すメソッドではありませんが、仮想マシンJVMによって呼び出されます。
equals()は、2つのオブジェクトの内容が同じであるかどうかを判別するために使用されます
2人のヒーローが同じ馬力を持っている場合、2人のヒーローは同じだと思います
public class Hero {
public String name;
protected float hp;
public boolean equals(Object o){
if(o instanceof Hero){
Hero h = (Hero) o;
return this.hp == h.hp;
}
return false;
}
public static void main(String[] args) {
Hero h1= new Hero();
h1.hp = 300;
Hero h2= new Hero();
h2.hp = 400;
Hero h3= new Hero();
h3.hp = 300;
System.out.println(h1.equals(h2));
System.out.println(h1.equals(h3));
}
}
"=="これはObjectメソッドではありませんが、2つのオブジェクトが同じであるかどうかを判断するために使用されます。
より正確には、2つの参照が同じオブジェクトを指しているかどうかを判断するために使用されます。
最後の
Heroがfinalに変更されると、Heroを継承できず、
そのサブクラスでコンパイルエラーが発生することを意味します。
HeroのuseItemメソッドがfinalに変更された場合、このメソッドをADHeroでオーバーライドすることはできません。
Finalは、基本型変数を変更します。つまり、変数に割り当てられる可能性は1回だけです。
最終的に変更された参照
h参照はfinalに変更されます。これは、参照がオブジェクトを指す機会が1回だけであることを意味します。
定数を定義するために使用されます:
定数は、公開され、直接アクセスでき、変更されない値を指します
public static final int itemTotalNumber = 6;
抽象クラス
クラスでメソッドを宣言します。このメソッドには実装本体がなく、「空の」メソッドです。
このようなメソッドは、修飾子「abstract」を使用して、抽象メソッドと呼ばれます。
継承後、抽象メソッドを実装する必要があります。
クラスに抽象メソッドがある場合、そのクラスは抽象クラスとして宣言する必要があります
抽象クラスは抽象メソッドを持つことはできません。
クラスが抽象クラスとして宣言されると、直接インスタンス化することはできません。
抽象クラスとインタフェースとの間の差
の違い1:
サブクラスは一つだけ抽象クラスを継承、複数することができない
サブクラスを実装することができ、複数のインターフェイスの
違い2:
抽象クラスを定義することができる
パブリック、保護、パッケージ、プライベート
静的および非静的の
決勝プロパティと非最終属性、
インタフェースで宣言されたが、属性が唯一することができ
、パブリックと
静的
、最終的に
明示的な宣言がない場合でも、