[ジャワ] インターフェースを使用する
そのような行うためのユーザインタフェースとして提起多くの問題があり、, なぜ使用インターフェイス, インタフェースの使用方法,… この記事では、私はそれは、通常、比較的抽象的であるため、可能な限り多少理解できるに答えることができるように願っています=)) また、以下に書かれていると言うことは私の限られた理解の一部である, 私にとって本当に素晴らしい何かが同様であるあなたが補うことができます場合は、トラッキングを読んで.
1. 使用できるインターフェイスオブジェクトを作成するための共同行動
たとえば、常にオフライン. 毎日あなたは被験者の多くを学ぶことを想像してみて, 数学, LY, 化学, ボルン, 英語, ヴァン, 歴史,… 各被験者本や遊び, そのように本当に不便ときに “で構成される” クラスへ. 今、私はあなたに、クラスに来ていることを目標に研究されているもの今日知っている必要はありません方法を提示, すべての科目を収容することができます汎用性のものを使用する. 自身が内のすべての被験者がそのように作られてい 1 汎用性の高いノートブック, 学校ばかり=締めくくっていることを選んだ)).
プログラミングでは、本 (登録) あなたのある汎用性の高いインターフェース. 今すぐトライアルをオフラインで起動する. あなた数学, LY, 化学, ボルン,.. 私は、今述べたように, 各モジュールはクラスです. あなたは本の配列を持っているし、学校にそれを持参する必要があり、我々はどのように我々は普通に見てみてください?
package cachhoc.net.useinterface.method; class Toan { public void mangSachToiTruong() { System.out.println("Sach Toan duoc mang toi truong"); } } class Ly { public void mangSachToiTruong() { System.out.println("Sach Ly nhe"); } } class Hoa { public void mangSachToiTruong() { System.out.println("Sach Hoa ok"); } } class Sinh { public void mangSachToiTruong() { System.out.println("Sach Sinh day roi"); } } public class TruongHoc { public static void main(String[] args) { Object[] sach = { new Toan(), new Ly(), new Hoa(), new Sinh() }; for (Object s : sach) { s.mangSachToiTruong(); // loi roi nhe } } }
あなたはコードを試しに行く, あなたが表示されますアレイは、我々はそれを置くために他の方法は、Object配列がなく、メソッドを呼び出すサックス作成することですmangSachToiTruong() ことはできません.
今、インタフェースは、この問題を解決するために私たちを助ける. まず、インターフェイスを作成 図書 方法がある mangSachToiTruong();
package cachhoc.net.useinterface.method; public interface Sach { public void mangSachToiTruong(); }
その後、我々はクラストアンを作成, グラス, フラワー, 生まれ、実行可能ファイルは次のように書籍mangSachToiTruongし、問題が解決されているメソッドを実装します.
package cachhoc.net.useinterface.method; class Toan implements Sach { @Override public void mangSachToiTruong() { System.out.println("Sach Toan duoc mang toi truong"); } } class Ly implements Sach { @Override public void mangSachToiTruong() { System.out.println("Sach Ly nhe"); } } class Hoa implements Sach { @Override public void mangSachToiTruong() { System.out.println("Sach Hoa ok"); } } class Sinh implements Sach { @Override public void mangSachToiTruong() { System.out.println("Sach Sinh day roi"); } } public class TruongHoc { public static void main(String[] args) { Sach[] sach = { new Toan(), new Ly(), new Hoa(), new Sinh() }; for (Sach s : sach) { s.mangSachToiTruong(); } } }
2. データ送信, クラス間のメッセージ
これは、しばしば言われているクラスのデータ交換, インターフェイスを介してメッセージ. このセクションでは、それを学びます. 我々はインターフェイス上で行う場合、この問題がより明確になります, すなわちJFrameのを使用して. しかし、あなたは星なしとうまくインターフェースしない場合は、.
あなたが持っている 2 クラスはGiaoDienとダウンロードです. GiaoDienクラスには、ボタンがあります, クラスでダウンロードするダウンロードのメソッド呼び出しをクリックすると、ファイルをダウンロードする, とダウンロード中, ダウンロードされているどのくらい知って戻ってクラスGiaoDienに取得するためのクラスのダウンロードと. 分かりますか 2 自分自身の次のメソッド.
方法 1 (何歳トウモロコシや使用警棒): ダウンロードダウンロードパーセントを更新するクラスインターフェイスのためのコミュニケーションオブジェクト.
package cachhoc.net.useinterface.senddata; public class GiaoDien { private Download download; /** * phuong thuc khoi tao Giao dien, dong thoi khoi tao doi tuong download va * truyen chinh giao dien sang class Download de cap nhat giao dien */ public GiaoDien() { download = new Download(this); } private void nhanDownload() { download.download(); } public void capNhatGiaoDien(int phanTramDownload) { System.out.println("class giao dien cap nhat duoc: " + phanTramDownload + "%"); } public static void main(String[] args) { GiaoDien giaoDien = new GiaoDien(); giaoDien.nhanDownload(); } }
package cachhoc.net.useinterface.senddata; public class Download { private GiaoDien giaoDien; /** * @param giaoDien * de cap nhat giao dien */ public Download(GiaoDien giaoDien) { this.giaoDien = giaoDien; } public void download() { for (int i = 0; i < 100; i++) { System.out.println("Dang download..."); giaoDien.capNhatGiaoDien(i); } System.out.println("Ket thuc download"); } }
あなたが見てきたように、単純なように更新インタフェースは、我々だけでダウンロードが終了したクラスオブジェクトへのインターフェイスを通過したことを証明した.
しかし、多くの問題は、オブジェクトがgiaoDienに渡されたときに発生, ダウンロードクラスは、それがGiaoDien必要はないあるクラスのメソッドを呼び出すことが許可されている, クラスの呼び出しは、それがここに一人で公衆に及びませ民間ことを呼び出すことができますダウンロードできるようにするために必要な更新されたインタフェースメソッド. それとも私たちはクラスの真ん中にある特定のクラスXを通過する必要があり、クラスが、メソッドのダウンロードは新しいコールをダウンロードして、私たちはX GiaoDienに転送する必要があるとし, Xは、ダウンロードするために送信, このような複雑な… 実際にあなたをよりよく理解することになり、他の多くの制約.
方法 2: 使用できるインターフェイス
私たちは、CapNhatメソッドが含まれて呼ばれるインターフェイスを作成capNhatGiaoDien(); GiaoDien次に、以下のCapNhatを実装しています:
package cachhoc.net.useinterface.senddata; public interface CapNhat { public void capNhatGiaoDien(int giaTri); }
package cachhoc.net.useinterface.senddata; public class Download { private CapNhat capNhat; /** * @param capNhat * lang nghe su kien download */ public void addDownloadListener(CapNhat capNhat) { this.capNhat = capNhat; } public void download() { for (int i = 0; i < 100; i++) { System.out.println("Dang download..."); /** * Khi goi capNhat.capNhatGiaoDien(i); thi phuong thuc nay se tu * dong duoc goi trong giao dien * */ capNhat.capNhatGiaoDien(i); } System.out.println("Ket thuc download"); } }
package cachhoc.net.useinterface.senddata; public class GiaoDien implements CapNhat { private Download download; /** * phuong thuc khoi tao Giao dien, dong thoi dat lang nghe su kien download */ public GiaoDien() { download = new Download(); /** dat lang nghe su kien download */ download.addDownloadListener(this); } private void nhanDownload() { download.download(); } /** * Tu dong duoc goi trong qua trinh download thong qua interface CapNhap */ @Override public void capNhatGiaoDien(int giaTri) { System.out.println("class giao dien cap nhat duoc: " + giaTri + "%"); } public static void main(String[] args) { GiaoDien giaoDien = new GiaoDien(); giaoDien.nhanDownload(); } }
あなたは道ていることがわかります 2 これは古典的な方法の欠点を克服 1. クラスは、テレビ視聴者だけで一つのインターフェースGiaoDien CapNhatをダウンロードする必要はありません, そのための方法, 非薬物GiaoDienの計算 “暴露” またはダウンロードと呼ばれることがある. あなたが特定のクラスXに合格した場合は、新しい実装がダウンロード中にインターフェイスを更新されたオブジェクトGiaoDien中間クラスを通過する必要はありませんダウンロード. または多くのインターフェイスは、ダウンロード中に更新する必要があるとし、それがどのようにのように無関心である 1 あなたがダウンロードするためのインタフェースのすべてのクラスを渡す必要があるため、より困難であろう…
上にある 2 彼らは最も目に見える使用Interfaceアプリケーション. 私たちは、インターフェイスを使用する方法を学ぶことは、プロセスであなたのために役立つことを願って.
のソース記事 cachhoc.net
自然光インタフェースを使用する方法を理解していません, 非常にストレート区に落ちるれているオンラインのブログを検索.
かなり良い記事. そして、まだ私のメッセージ: “私にとって本当に素晴らしい何かが同様であるあなたが補うことができます場合は、トラッキングを読んで”, 私はコメントしましょう 1 この場所の.
1. 使用できるインターフェイスオブジェクトを作成するための共同行動: OK, 私はここで使用することができinterace, しかし、より多くの抽象クラスを使用することができます. では、なぜあなたは抽象クラスの代わりにインターフェイスを使用しています?
2. データ送信, クラス間のメッセージ: 優れました. 多少オブザーバーパターンのように見えます, 私がやりました 1/3. しかし、彼はより多くの貢献しました 2 それがためにのための標準 3/3 = 1 完全なオブザーバーパターン.
2.1. GiaoDienへのあなたのアイデアは良いCapNhatを実装します, 唯一のクラスのダウンロードCapNhatと、クラスの仕事. しかし、労働者階級は、直接クラスのダウンロードとGiaoDien? なぜ我々は、ダウンロードのために同じことをしないでください, ダウンロードは実装を意味します 1 特定のInterfaceX, とInterfaceX GiaoDienで動作します. その理由は、同様の実装GiaoDien CapNhatです.
2.2. どのように複数のクラスをご希望の場合はダウンロードに通知 1 オブジェクトCapNhat? 代わりに使用しての 1 オブジェクト、私はcapNhatを使用することができます 1 このようなコレクション.
OK, それで全部です. 🙂
ダはい, キッズ氏ホアンのコメントに感謝します. あなたが記事に添えます.
彼の質問については、…
1. 私は完全に抽象クラスは、これを行うことができると思います, しかしながら、 1 class chỉ kế thừa được 1 class nên nếu A & B có hành động chung là Hab, B & C có hành động chung là Hbc, thế thì việc này sẽ khó… mà khi dùng interface sẽ ổn 😉
2.1 Em nghĩ cái anh đưa ra rất tốt và hay.
2.2 Dùng Collection trong trường hợp này là đúng là tiện nhất anh nhỉ 😉
Anh có thể viết lại 2 góp ý này được không ạ
cái interface phải đặt riêng 1 file khác à bạn? その誤差それ一般市民へ.
一般的によくことです. この一般的な問題のためのシンプルなインターフェイスは、そうでなければ簡単に管理のために離れて設定されている場合.
私はOOPについてのすべての私のチュートリアルを必要とするが、あなたはちょうど見ました 2 共有クラス , オブジェクトとインターフェイス. あなたはすべての小さな残りを導くことを願って!
ようこそ、. 今私は、DLを書きました 2 それをすべて一人で… 私はあああなたを書く時間がありませんでした他の部分.
彼は、電子抽象化を取るための理由のインタフェースを説明しました 100% からその抽象クラス 0-100% そうではありません
唯一のインタフェース機能抽象定義するので、それらは、コンテンツを展開することができます
ポストの主な機能のループの意味は、それが助けeをmangSachToiTruongされていない説明することができます?
のために (サックス秒 : サッチ峠) {
s.mangSachToiTruong();
}
それはforeachのオフラインです. リストサックスを閲覧, 各要素の承認.
ありがとう, 非常に有用な記事!
私は彼を迎えました!
ある程度 2: Truyền dữ liệu giữa các class, 彼は間の違いについての詳細を説明することができれば 2 どのようにされないこと? 今、私は参照してください。 2 interfaceface方法かどうか、一部のcapnhat(giaoDien) まだ同じを使用することができます, だから、別のどこにも先生ではありません?
ありがとうございます!
しかし、多くの問題は、オブジェクトがgiaoDienに渡されたときに発生, ダウンロードクラスは、それがGiaoDien必要はないあるクラスのメソッドを呼び出すことが許可されている, クラスの呼び出しは、それがここに一人で公衆に及びませ民間ことを呼び出すことができますダウンロードできるようにするために必要な更新されたインタフェースメソッド. それとも私たちはクラスの真ん中にある特定のクラスXを通過する必要があり、クラスが、メソッドのダウンロードは新しいコールをダウンロードして、私たちはX GiaoDienに転送する必要があるとし, Xは、ダウンロードするために送信, あなたが行うとき、実際には理解されるように非常に複雑...と他の多くの制約.
彼をTKS!
“しかし、多くの問題は、オブジェクトがgiaoDienに渡されたときに発生, ダウンロードクラスは、それがGiaoDien必要はないあるクラスのメソッドを呼び出すことが許可されている, クラスの呼び出しは、それがここに一人で公衆に及びませ民間ことを呼び出すことができますダウンロードできるようにするために必要な更新されたインタフェースメソッド. ” : 私は何度も読み返すと、まだ間の違いを見ていないしているこの場所 2 から, khi sử dụng interface capnhat thì tham chiếu capnhat này vẫn có thể gọi các phương thức trong giaodien y hệt cách 1, vẫn có thể gọi những phương thức không cần thiết :(.
Ở class Download bạn có thể gọi hàm nhanDownload() ?. Nếu ở class GiaoDien có 1 biến public abc, bạn có gọi được trực tiếp biến abc đó ở class Download thông qua cái kia?
Xin lỗi đã làm phiền anh, em đã tìm ra chỗ sai của mình rồi! ありがとうございます!
🙂 ko co chi 🙂
ở cái vd thứ 2 インターフェイスは、使用しています : クラスcapnhat内のオブジェクトは、それを載せられ、おそらくそれをimplment任意のクラスの任意のオブジェクトへの参照です (オブジェクトのようなcapnhatは、クラスオブジェクトのすべてがそれを実装して表し , この後、あなたがしたいです 1 だけでなく、先生のcapnhatを実装するに載せられとして、クラスアクションのような特定のクラスが、私は持っています ) , そして、インターフェイスメソッドの宣言にcapnhat新しいオブジェクトが先生TELを呼び出してはならないん ??
そう言うことができます
Bài của anh hay quá,nếu có thể mong anh thêm nhiều ví dụ hơn về chủ đề này được không anh,
ありがとう, mình sẽ cố gắng 🙂
Công dụng của interface còn gì nữa không anh? Mặc dù đã biết sơ qua về 2 công dụng trên nhưng xem 2 ví dụ của anh làm em thêm rõ hơn .Thank anh
Bạn có thể cho mình biết, khi nào dùng interface, khi nào dùng abstract
Nôn na là dùng abstract khi mà 1 特定書き出すとも方法は、具体的書き出すことができないメソッドを持つクラス. すべてのメソッドがオフに書かれた固有のものではありませんときに使用されるインタフェース.
クラスに情報を継承させる方法を聞いてみましょう。 2 別のクラス? 確認したところ、インターフェースを使用しているとのことでした?
SME, Javaでは継承はありません 2 通常のクラス. から継承したい 2 以上、インターフェースを使用する.