JAvaマルチステートの知識点のまとめ
2571 ワード
以前はオブジェクト向けの多態を学習していましたが,現在は関連する知識点をまとめています.
マルチステート:
【体現】
親の参照またはインタフェースの参照は、自分のサブクラスオブジェクトを指します.
【メリット】
プログラムの拡張性の向上
【弊害】
子オブジェクトを親から参照して操作する場合は、親に既存のメソッドのみが使用され、子固有のメソッドは操作できません.
【前提】
1、関係がある必要があります:継承、実現、
2,通常は書き換え操作があります.
マルチステートテクノロジーの引き出しはプログラムの拡張性の問題を解決し、そのサブクラスの特有の方法はどのように呼び出されますか?
アップグレードのメリット:拡張性が向上し、サブタイプが非表示になります.弊害:サブタイプ特有の方法は使用できません.サブクラス固有のメソッドを使用する場合は、サブタイプのみが使用できます.下に転換し、強制的に転換することができます.
【ダウンシフトへの注意事項】
次のようになります.
【転換総括】
1、いつアップグレードしますか?
プログラムの拡張性を向上させ、サブタイプ(サブタイプが隠されている)に関心を持たず、サブクラス特有の方法を使用する必要はありません.
2、いつダウンシフトを使用しますか?
サブタイプ特有のメソッドを使用する必要がある場合は、必ずinstanceofでタイプの判断を行い、ClassCastExceptionが発生しないようにしてください
犬と猫が拡張性を向上させる方法を説明します.
マルチステート:
【体現】
親の参照またはインタフェースの参照は、自分のサブクラスオブジェクトを指します.
【メリット】
プログラムの拡張性の向上
【弊害】
子オブジェクトを親から参照して操作する場合は、親に既存のメソッドのみが使用され、子固有のメソッドは操作できません.
【前提】
1、関係がある必要があります:継承、実現、
2,通常は書き換え操作があります.
マルチステートテクノロジーの引き出しはプログラムの拡張性の問題を解決し、そのサブクラスの特有の方法はどのように呼び出されますか?
Animal a = new Dog(); //Animal ,newDog() 。
ただし、親タイプ参照が子クラスオブジェクトを指す場合、子クラスオブジェクトはタイプアップ(アップシフト)されます.アップグレードのメリット:拡張性が向上し、サブタイプが非表示になります.弊害:サブタイプ特有の方法は使用できません.サブクラス固有のメソッドを使用する場合は、サブタイプのみが使用できます.下に転換し、強制的に転換することができます.
Animal a = new Dog();
a.eat();
Dog d = (Dog)a;// a Dog , 。
d.lookHome();
サブタイプ固有のコンテンツを使用する必要がある場合は、ダウンシフトを使用します.注意:アップまたはダウンにかかわらず、最終的にはサブクラスオブジェクトがタイプを変更しています.【ダウンシフトへの注意事項】
次のようになります.
Animal a = new Dog();
//Cat c = (Cat)a; , ClassCastException
ですので、この問題を避けるためには、下への転換前に、タイプの判断をし、タイプを判断するためのキーワード:instanceofif(a instanceof Cat) //a Cat {
// a Cat
Cat c = (Cat)a;
c.catchMouse();
}
else if(a instanceof Dog){
Dog d = (Dog)a;
d.lookHome();
}
【転換総括】
1、いつアップグレードしますか?
プログラムの拡張性を向上させ、サブタイプ(サブタイプが隠されている)に関心を持たず、サブクラス特有の方法を使用する必要はありません.
2、いつダウンシフトを使用しますか?
サブタイプ特有のメソッドを使用する必要がある場合は、必ずinstanceofでタイプの判断を行い、ClassCastExceptionが発生しないようにしてください
犬と猫が拡張性を向上させる方法を説明します.
// Dog
class Dog extends Animal
{
public void eat()
{
System.out.println(" ");
}
public void lookHome()
{
System.out.println(" ");
}
}
//
class Cat extends Animal
{
public void eat()
{
System.out.println(" ");
}
public void catchMouse()
{
System.out.println(" ");
}
}
// 。 Animal 。
abstract class Animal
{
public abstract void eat();
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Dog d = new Dog();
// d.eat();
method(d);
Cat c = new Cat();
method(c);
}
/*
, , ,
。
。
?
eat, dog, cat,
eat , , eat 。 Animal 。
Dog Animal 。
Dog d = new Dog();
Animal a = new Dog();
Cat c = new Cat();
Animal aa = new Cat();
*/
// animal dog cat 。 eat。
// 。
public static void method(Animal a)
{
a.eat();
}
/*
// Dog, dog 。
public static void method(Dog d)
{
d.eat();
}
// Cat, cat 。
public static void method(Cat c)
{
c.eat();
}
*/
}