Java IDインタフェースの使用方法
2792 ワード
識別インタフェースは、メソッドと属性がないインタフェースです.識別インタフェースは、実装されたクラスが特定のタイプに属していることを示すだけで、実装されたクラスに意味的な要件はありません.
標準インタフェースはJava言語でjavaなどの有名な応用がある.io.Serializableとjava.rmi.Remoteなどのインタフェースは識別インタフェースです.クラスが識別インタフェースを実装した後、自分にラベルをつけたようなインタフェースを識別します.
そのため、私たちは通俗的で面白い例を通じて!この例はハンターを設計し、知能猟銃を持っている.つまり、この猟銃は自動的に人間を識別し、狙った目標が人間であることを発見すれば、火をつけず、他のものはすべて殺す.
このため、次の3つのインタフェースを使用しました.
万事万物を表すSomeThing
人間のインタフェース:
動物のインタフェース:
次の一連の実装が行われます.
中国人:
日本人:
犬:
妖怪(彼は頭が良くて、自分に人のラベルを貼った):
次のプログラムの核心部分は、人間とクライアントプログラムです.
プログラムを実行すると、次のような結果が出力されます.
撃った!class springroad.demo.taginterface.Dogが撃った!class springroad.demo.taginterface.Japaneseが撃った!class springroad.demo.taginterface.Japaneseが撃った!class springroad.demo.taginterface.Hunter$1
このように、スマート猟銃は6つの目標を狙って4発撃った.Chinese、Monsterの例だけは発砲しなかった.ここではラベルインタフェースについて議論しているので、Humansには何の方法もないが、スマート猟銃の観点から見ると、彼はこのラベルを通じて火をつけることができるかどうかを判断している.彼は目標の階層関係を管理しなくても管理できない(例えばJapaneseは非常に鮮明な階層構造に違いない)、つまり関係を継承する.彼も目標がどこから来たのか管理できない.たとえば、newオペレータで作成するか、コンテナから取得するか、ネットワークのどこかからロードします.
Hunterはただ簡単なルールを作っただけで、私の銃があなたに火をつけないようにするには、自分の体にHumansのラベルを貼らなければなりません.つまり、あなたはこのルールを守らなければなりません.
今振り返ってみると、妖怪モンスターは本物が蛇か何かの動物であるべきだからだが、彼はHunterが作ったルールを知っていて、巧みに自分にHumansのラベルを貼って、私たちの知能猟銃をだました.
Japaneseは自分が起きられないと思って、規則に従って仕事をしないで、私はあなたのHunterが制定した規則を相手にしないで、何のHumansラベル、私は使いません.そこで私たちのプログラムに入れたのはもちろん殺された分だけです.
このように,空インタフェース(ラベルインタフェース)の重要性は,本例のように,自分にラベルを貼らないことが命にかかわる問題である.実はOOの世界の中で、空のインターフェースは最高の層像と言える.
標準インタフェースはJava言語でjavaなどの有名な応用がある.io.Serializableとjava.rmi.Remoteなどのインタフェースは識別インタフェースです.クラスが識別インタフェースを実装した後、自分にラベルをつけたようなインタフェースを識別します.
そのため、私たちは通俗的で面白い例を通じて!この例はハンターを設計し、知能猟銃を持っている.つまり、この猟銃は自動的に人間を識別し、狙った目標が人間であることを発見すれば、火をつけず、他のものはすべて殺す.
このため、次の3つのインタフェースを使用しました.
万事万物を表すSomeThing
public interface SomeThing {}
人間のインタフェース:
public interface Humans extends SomeThing{}
動物のインタフェース:
public interface Animals extends SomeThing{}
次の一連の実装が行われます.
中国人:
public class Chinese implements Humans {}
日本人:
public class Japanese {}
犬:
public class Dog implements Animals {}
妖怪(彼は頭が良くて、自分に人のラベルを貼った):
public class Monster implements Humans {}
次のプログラムの核心部分は、人間とクライアントプログラムです.
public class Hunter{
public void fire(Object target)
{
if(target instanceof Humans){
System.out.println(" , , !");
}else{
System.out.println(" , !");
}
}
//
public void intelligentFire(Object target)
{
if(target instanceof Humans){
return;
}
System.out.println(" !"+target.getClass());
//
//
target=null;
}
public static void main(String[] args) {
Hunter hunter=new Hunter();
Object[]
objects =new Object[]{new Dog(),new Japanese(),new Japanese(),new Chinese(),new Monster(),new SomeThing(){}};
for(int i=0; i
プログラムを実行すると、次のような結果が出力されます.
撃った!class springroad.demo.taginterface.Dogが撃った!class springroad.demo.taginterface.Japaneseが撃った!class springroad.demo.taginterface.Japaneseが撃った!class springroad.demo.taginterface.Hunter$1
このように、スマート猟銃は6つの目標を狙って4発撃った.Chinese、Monsterの例だけは発砲しなかった.ここではラベルインタフェースについて議論しているので、Humansには何の方法もないが、スマート猟銃の観点から見ると、彼はこのラベルを通じて火をつけることができるかどうかを判断している.彼は目標の階層関係を管理しなくても管理できない(例えばJapaneseは非常に鮮明な階層構造に違いない)、つまり関係を継承する.彼も目標がどこから来たのか管理できない.たとえば、newオペレータで作成するか、コンテナから取得するか、ネットワークのどこかからロードします.
Hunterはただ簡単なルールを作っただけで、私の銃があなたに火をつけないようにするには、自分の体にHumansのラベルを貼らなければなりません.つまり、あなたはこのルールを守らなければなりません.
今振り返ってみると、妖怪モンスターは本物が蛇か何かの動物であるべきだからだが、彼はHunterが作ったルールを知っていて、巧みに自分にHumansのラベルを貼って、私たちの知能猟銃をだました.
Japaneseは自分が起きられないと思って、規則に従って仕事をしないで、私はあなたのHunterが制定した規則を相手にしないで、何のHumansラベル、私は使いません.そこで私たちのプログラムに入れたのはもちろん殺された分だけです.
このように,空インタフェース(ラベルインタフェース)の重要性は,本例のように,自分にラベルを貼らないことが命にかかわる問題である.実はOOの世界の中で、空のインターフェースは最高の層像と言える.