TIJ復習ノート8
3565 ワード
, (encapsulation) (inherit) 。
典型的なマルチステートは、B、CがAを継承し、その中のメソッドfooを上書きすることであり、あるコードにはタイプAが含まれており、BとCの参照を渡すことができ、Aでメソッド(A.foo)を呼び出し、マルチステート性のため、正しいBまたはCの対応するメソッド(foo)が見つかる.
その中で、カバー、継承、アップグレードに関連しています.
最も明らかなのは、コード多重化の能力を高めることです.あるところでは、タイプはAのタイプを書くだけで、直接使うことができて、D、Eを拡張してAを継承して、このコードを引き続き使うことができます.1つの関数または方法は,異なる効果,すなわち多態性を示す.
コードを見る
import java.util.*;
class Shape {
void draw(){
}
}
class Circle extends Shape {
@Override
void draw(){
System.out.println("Circle.draw()");
}
}
class Triangle extends Shape {
@Override
void draw(){
System.out.println("Triangle.draw()");
}
}
public class HelloWorld {
public static void poly(Shape s){
s.draw();
}
public static void main(String[] args){
poly(new Triangle());
poly(new Circle());
}
}
sはShapeタイプであるが,多態性のため,いずれも対応する方法を見つけることができ,後期バインドとも呼ばれる.
マルチステートの利点と欠陥
メリット:
拡張性、たとえばタイプの追加
Class Square extends Shape {
@Override
void draw(){
System.out.println("Squre.draw()");
}
}
//.....
poly(new Square());
polyメソッドについては変更できません.
欠点:
メンバー変数は、polyでshapeを使用するメンバー変数のようなマルチステートでは使用できません.マルチステートバインドは行われません.
静的メソッドはマルチステートではありません.静的メソッドはクラスメソッドで、オブジェクトに属しません.
コンストラクタはマルチステートではなく、コンストラクタ自体がstaticです.
コンストラクタとマルチステート
コンストラクタ自体はマルチステートではなく、コンストラクタ内部はマルチステートであってもよい.しかし、これは安全ではありません.コンストラクタ内部でメンバーメソッドを呼び出すのは、finalのメンバーメソッドだけです.安全です.finalのメソッドは上書きできないので、マルチステートは発生しません.
また、コンストラクタのロード順序、親メンバー初期化、親コンストラクタ、子メンバー初期化、子コンストラクタ.
コヒーレント戻りタイプ
JAVA 1.5で提案されている、カバーについて.
親クラスではType 1 foo(int i){}子クラスでType 2 foo(int i){}
Type 2がType 1のエクスポートクラスであれば、これも上書きとなります.
アップ・モデルチェンジとダウン・モデルチェンジ
class A {
void foo1(){}
}
class B extends A{
void foo2(){}
public static void main(String[] args){
A ob = new B();//
// ob.foo2();
((B)ob).foo2(); //
}
}
その他
しばらく
END