【走る菜鳥】Javaの多態
1514 ワード
マルチステートはオブジェクト向けプログラミングの難点の一つであるべきである.では、いったい何が多態なのでしょうか.実際に多態の最も顕著な特徴は晩バインドである.遅いバインドがなければ、マルチステートではありません.マルチステートは、カプセル化、継承の基礎の上に構築されます.通常の表現では、親の参照は子のオブジェクトを指すことができ、子の参照は親のオブジェクトを指すことができません.その中にはupcastとdowncastが存在します.upcastとは、アップタイプ変換であり、upcastを使用する場合、一般的に強制タイプ変換記号を使用しなくてもよい.しかしdowncastの場合.強制タイプ変換を使用する必要があります.ここではまず簡単な例を挙げます.
class A Class B extends A
/*********************upcast**********************/B b = new B();
A a = b;
/*********************downcast********************/
A b = new B();
B bt = (B)b;//このとき(B)は、bタイプがAであるため必須である
では、いったい、マルチステートは実際のプログラミングで何の役に立つのでしょうか.マルチステートは、子クラス間の差異を遮断し、親クラスの共通インタフェースを示すことができます.次のコードを見てください.
共通インタフェースを親クラスで識別し、サブクラスに直接転送し、サブクラスを呼び出す方法.
class A Class B extends A
/*********************upcast**********************/B b = new B();
A a = b;
/*********************downcast********************/
A b = new B();
B bt = (B)b;//このとき(B)は、bタイプがAであるため必須である
では、いったい、マルチステートは実際のプログラミングで何の役に立つのでしょうか.マルチステートは、子クラス間の差異を遮断し、親クラスの共通インタフェースを示すことができます.次のコードを見てください.
public class Test
{
public void whoIsRuning(Car car)
{
car.fun();
}
public static void main(String[] args)
{
Test test = new Test();
Car_1 car1 = new Car_1();
test.whoIsRuning(car1);
System.out.println("------------------------------------------");
Car_2 car2 = new Car_2();
test.whoIsRuning(car2);
}
}
class Car
{
public void fun()
{
System.out.println("Car is running");
}
}
class Car_1 extends Car
{
public void fun()
{
System.out.println("Car_1 is running");
}
}
class Car_2 extends Car
{
public void fun()
{
System.out.println("Car_2 is running");
}
}
実行結果:Car_1 is running
------------------------------------------
Car_2 is running
共通インタフェースを親クラスで識別し、サブクラスに直接転送し、サブクラスを呼び出す方法.