Java概要マルチステートと実装方法
3687 ワード
概念:同じ操作が異なるオブジェクトに作用し、異なる解釈があり、異なる実行結果を生成することができます.これが多態性です.
簡単に言えば、ベースクラスの参照でサブクラスのオブジェクトを指します.
例を挙げます.
コンピュータの上のF 1ボタン、いかなるファイルを開けないでFをクリックします!システムのヘルプドキュメントが表示され、wordドキュメントを開いてF 1をクリックするとwordドキュメントのヘルプが表示され、同じボタンでも異なる処理が可能になります.
パッケージは実装の詳細を隠し、コードをモジュール化できることを知っています.継承は、既存のコードモジュール(クラス)を拡張します.コードの再利用を目的としています.
マルチステートはコードの多重性に加えて、プロジェクトにおける密接なカップリングの問題を解決し、プログラムの拡張性を高めることができる.
プロジェクトの結合度が高い場合、コードのメンテナンス時に1つの場所を修正することは多くの場所につながり、開発コストが絶えず増加し、結合度を低減することが保証されます.
プログラムの拡張性.
置換可能(substitutability).マルチステートは既存のコードに対して置換可能です.たとえば、マルチステートは円Circleクラスに対して動作し、円環などの他の任意の円形ジオメトリに対しても同様に動作します.
拡張性(extensibility).マルチステートはコードに対して拡張性を有する.新しいサブクラスを追加することは、既存のクラスのマルチステート性、継承性、その他の特性の動作および操作に影響を及ぼさない.実際には、新しいサブクラスはマルチステート機能を獲得しやすい.例えば、円錐、半円錐および半球のマルチステートを実現した上で、球体クラスのマルチステート性を追加しやすい.
インタフェース実装、抽象クラス、親を継承してメソッドの書き換え、同じクラスでメソッドの再ロードを行います.
public interface InterDemo(){
void setData();
int getCount();
}
public class InterImpl implements InterDemo(){
@Override
public void setData(){
//....
}
@Override
public void getCount(){
//....
}
}
抽象クラスはクラス全体を抽象化し、属性、動作を含むが、インタフェースはクラスのローカル(動作)を抽象化するので、抽象クラスはプロジェクトの開始時に確定しなければならない共通クラスである.
interface FlyInter {
void fly();
}
public abstract class FlyGroups implements FlyInter{
public String name = " ";
public String getName(){
return name;
}
abstract void fun();
}
public class Airplane extends FlyGroups {
@Override
public void fly() {
String name = super.getName();
System.out.println(name);
}
@Override
public void fun(){
}
}
public class Parent{
public void fun(){
}
}
public class Child extends Parent{
@Override
public void fun(){
//
}
}
public void init(String name,int i){
}
public void init(int i,String name){
}
public void init(){
}
public int init(){
}
JVMメソッド呼び出しの静的(static binding)および動的バインドメカニズム(auto binding)
このようなプログラム実行中に動的に作成されたオブジェクトのメソッドテーブルによってメソッドを位置決めする方法は,動的バインドメカニズムとも多態の体現である.
//
class Father{
public void f1(){
System.out.println("father-f1()");
}
public void f1(int i){
System.out.println("father-f1() para-int "+i);
}
}
//
class Son extends Father{
public void f1(){ //
System.out.println("Son-f1()");
}
public void f1(char c){
System.out.println("Son-s1() para-char "+c);
}
}
public class AutoCall{
public static void main(String[] args){
Father father=new Son(); //
father.f1(); // : Son-f1()
}
}