Javaでのオブジェクト、クラス、抽象クラス、インターフェイス、および継承間の接続について

Javaのオブジェクト、クラス、抽象クラス、インターフェース、および継承の間の関係について:

前書き:

冬休みにJavaSEの基本を学びますが、そこには多くの概念があり、関連性は比較的大きいので、もう一度、いくつかの関連する知識のポイントを確認し、それらの間の関係を整理します。

テキスト:

たとえば、今すぐ動物を定義する場合、その動物は公的基準である必要があり、この公的基準はインターフェースを介して完成させることができます。

動物は哺乳類と卵生動物の2つのカテゴリーに分けられます。この基準は動物基準をさらに改良したものであり、準基準と呼ばれるべきであるため、この関係はインターフェースの継承によって表現できます。

対照的に、動物iは、人間、犬、猫などのさまざまなタイプに引き続き分類できます。これらのタイプは特定の基準を表していないため、抽象クラスで表すことができます。

労働者や学生の概念を表現したいのであれば、それは特定の定義でなければならず、それから授業の方法を使用します。

次に、すべての学生またはすべての労働者が特定され、それはオブジェクトによって表されます。

次の図からわかるように、すべての設計で、インターフェイスを最初に設計し、サブクラスに継承する必要があります。

コードのインスタンス化:

 

エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェース; //動物インターフェースanimal {public abstract String breake();} //哺乳類---インターフェース継承拡張//クラスが実装されている場合-実装インターフェース哺乳類は動物を拡張します{//グローバルメソッド//抽象メソッド} //卵形の動物インターフェースEgg_laying_animalsextends animal {//グローバルメソッド//抽象メソッド} //人間の抽象クラス(哺乳類に属する)を定義する抽象クラスpeopelは哺乳類を実装する{} //非定義-人間の抽象クラス(入力哺乳類)抽象クラスsmall_animalは哺乳類を実装します{} //学生は人間のクラスに属します学生はpeopelを拡張します{@Overridepublic String breathe(){return null;}} public class interface Synthesis {public static void main(String [] args){//オブジェクト:クラスstudentのインスタンス化std = new student(); System.out.println(std.breathe());}}

インターフェース:

  1. インターフェイスの基本的な定義:

     

    エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェース; interface IMessageF {//インターフェースでは、グローバル変数、抽象メソッド(パブリックパーミッション)、デフォルトメソッド、静的メソッドを定義できます; //インターフェースに抽象メソッドがある場合、次に、インターフェイスはインスタンス化のためにサブクラス化する必要がありますpublic static final String INFO = "xbhog"; //グローバル変数publicabstract String getInfo(); // Abstractメソッド}クラスMessageIpmlはIMessageF {@Override public String getInfo(){//を実装しますメソッドオーバーライドreturn "hello xbhog!"; //メッセージを取得}} public classinterfaceの基本的な使用法{publicstatic void main(String [] args){//インターフェイス呼び出しのインスタンス化IMessageF msg = new MessageIpml(); //サブクラス親インターフェースSystem.out.println(msg.getInfo());}}をインスタンス化します。

  2. サブクラスは、複数の親インターフェースとインスタンス変換を実装します

     

    エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェース; interface Imessage1 {public static final String INFO = "xbhog"; public abstract String getInfo();} interface IChannel {public abstract boolean connect();} //複数の実装インターフェイスは2つを継承するため、親クラスの抽象メソッドをサブクラスで上書きする必要があります。クラスMessageImpl1はImessage1を実装します。IChannel{@Override public String getInfo(){if(this.connect()){return "blog address:Www .cnblogs.com / xbhog / ";} return" [default message] "+ Imessage1.INFO;} @Override public boolean connect(){return true;}}パブリッククラスサブクラスは、複数の親インターフェイスを実装します{public static void main(String [] args){Imessage1 msg = new MessageImpl1(); System.out.println(msg.getInfo()); // --------インターフェイスインスタンスの変換を監視する---------- --- Imessage1 msg1 = new MessageImpl1(); Object obj = msg1; //アップキャストIChannelチャネル=(IChannel)obj; //オブジェクトのIChannelインターフェイスインスタンスへの強制変換System.out.println(channel.connect() );}}

  3. サブクラスは抽象クラスを継承し、同時にインターフェースを実装します

     

    エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェイス; //メッセージインターフェイスインターフェイスIMessage1 {public static final String INFO = "xbhog"; public abstract String getInfo();} //チャネルインターフェイスインターフェイスIChannel1 {public abstract boolean connect( );} //抽象クラスを定義する抽象クラスDatabaseAbstract {public abstract boolean getDatabaseConnection();} //抽象クラスから継承し、インターフェイスクラスを実装するMessageImpl2 extends DatabaseAbstractimplements IMessage1、IChannel1 {@Override public String getInfo(){if (this.connect()){if(this.getDatabaseConnection()){return "[データベースメッセージ]ブログアドレス:https://www.cnblogs.com/xbhog/";} else {return "データベースメッセージにアクセスできません! ";}} return" [デフォルトメッセージ]: "+ IMessage1.INFO;} @Override public boolean connect(){return true;} @Override public boolean getDatabaseConnection(){return true;}}パブリッククラスサブクラスは抽象クラスを継承し、インターフェイスを実装します{public static void main(String [] args){IMessage1 msg = new MessageImpl2(); System.out.println(msg.getInfo());}}

  4. extendsは複数の親インターフェースを継承します

    インターフェイスの簡略化について:インターフェイスを定義するとき、静的なfinalキーワードとabstractキーワードは、グローバル定数と抽象メソッドでは省略できます。

     

    エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェース; interface Imessage3 {public static final String INFO = "xbhog"; public abstract String getInfo();} interface IChannel3 {public boolean connect(); //抽象メソッド、省略された抽象;} interface IService extends Imessage3、IChannel3 {public String service(); // Abstractメソッド、abstractは省略;} classMessageServiceはIServiceを実装します{@Overridepublic String getInfo(){return Imessage3.INFO;} @Override public boolean connect( ){return false;} @Override public String service(){return "[Database Message Service]:https://www.cnblogs.com/xbhog/";}} publicclass使用はextendsを使用して複数の親インターフェイスを継承します{publicstatic void main(String [] args){}}

  5. インターフェイスの強化

    インターフェイスを強化する必要がある理由:最初に、インターフェイスの下のサブクラスが親クラスのメソッドをオーバーライドする必要があることを理解する必要があります。インターフェイスの下に1000を超えるサブクラスがある場合、残念ながらインターフェイスはメソッドを追加する必要があります。すべてのサブクラスを上書きする必要があります新しいメソッドについてもう一度考えるのは怖いです。これに基づいて、構成するメソッドが追加されます。

    1. デフォルト定義の一般的な方法を追加します。インターフェースを簡単に拡張し、設計構造を簡素化します。

       

      エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェイス;インターフェイスIMessage {// public String message();をオーバーライドする必要があります; //抽象クラスpublicdefault String messageSmple(){return "null";}; //共通インターフェイスを定義しますこのメソッドにより、インターフェースの柔軟性が向上します。//サブクラスが多すぎる場合は、新しいメソッドを追加し、各サブクラスを上書きする必要があります。//デフォルトの共通メソッドは問題を解決します。サブクラスが必要な場合は、上書きし、パブリックにしますdefault boolean connect(){System.out.println( "xbhogをフォローするチャネルを確立..."); returntrue;}}クラスMessageImplはIMessageを実装します{publicString message(){return "xbhog";}} publicクラスインターフェイス定義は、デフォルト定義の共通メソッドの使用を強化します{public static void main(String [] args){IMessage msg = new MessageImpl(); if(msg.connect()){System.out.println(msg.message( ));}}}

    2. デフォルトのデメリット:オブジェクトは、呼び出されるインターフェイスを介してインスタンス化する必要があります。インスタンス化されたオブジェクトの依存関係を回避するために、静的メソッドを使用してインターフェイス呼び出しの詳細を非表示にすることができます。

       

      エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェイス; interface ImessageS {public String message(); //すべてのサブクラスに継承されるパブリックメソッドを定義しますpublicdefault boolean connect(){System.out.println( "サブスクリプションの確立xbhogBlog channel ..... "); return true;} //静的静的メソッドを確立し、public static ImessageS getInstance(){//サブクラスオブジェクトを取得return new MessageImple();}}クラスMessageImpleはImessageS {publicを実装しますString message(){if(this.connect()){return "www.cnblogs.com/xbhog";} return "null";}} publicclassインターフェイスで静的メソッドを定義します{publicstatic void main(String [] args){//サブクラスインターフェイスオブジェクトをインスタンス化しますImessageS msg = ImessageS.getInstance(); System.out.println(msg.message());}}

抽象クラス:

抽象クラスの特徴:

  1. 抽象メソッドを含むクラスは抽象クラスでなければなりません

  2. 抽象クラスは必ずしも抽象メソッドを持っているとは限りません

  3. 抽象クラスには、抽象メソッドと非抽象メソッドの両方が存在する可能性があります

  4. サブクラスが抽象メソッドを継承する場合は、抽象クラスの抽象メソッドを書き直すか、サブクラスを抽象クラスとして宣言します。

  5. メソッドには具体的な実装がなく、オブジェクトの作成には効果がなく、抽象クラスが継承に使用されるため、オブジェクトを作成できません。

  6. 基本的な定義

     

    抽象クラスMessage {プライベート文字列型; public abstract String getConnectInfo(); //抽象メソッドpublicvoid setType(String type){//抽象メソッドthis.type = type; }}

  7. 抽象クラス構築メソッド

     

    エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェイス; //抽象メソッドを構築しますabstractclass abMessage {private String type; //現時点では、抽象クラスにパラメーター構築メソッドが提供されていないため、単一パラメーターの構築を明示的に行う必要がありますサブクラスメソッドで呼び出されますpublicabMessage(String type){this.type = type;} public abstract String getContentInfo(); public String getType(){return type;} public void setType(String type){this.type = type; }} class Database extends abMessage {//サブクラス構築publicDatabase(String type){//親クラスの単一パラメーター構築メソッドsuper(type);} //抽象クラスメソッドをオーバーライドする@Overridepublic String getContentInfo(){ return "[" + super.getType()+ "】データベース接続情報";}}パブリッククラス構築メソッド{publicstatic void main(String [] args){abMessage demo = new Database( "xbhog"); System.out .println(demo。getContentInfo());}}

  8. 静的メソッドは抽象クラスで定義されます。このクラスのメソッドは、抽象クラスによってインスタンス化されたオブジェクトによって制限されません。

     

    エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェイス;抽象クラスmessage {public abstract String getInfo(); public static message getInstance(){return new datamessage();}} class datamessage extends message {@Override public String getInfo( ){return "xbhog database connection";}} public class abstract class Definition static {public static void main(String [] args){//このメソッドはstaticによって変更されるため、message.getInstanceのグローバルな使用はnewと同等です。 datamessage();メッセージmes = message.getInstance(); System.out.println(mes.getInfo());}}

  9. テンプレートデザインパターン

     

    WORK + Action.SLEEP + Action.EAT); System.out.println( "猪的行是-------"); pigAction.command(Action.SLEEP); }} WORK + Action.SLEEP + Action.EAT); System.out.println( "猪的行是-------"); pigAction.command(Action.SLEEP); }}

包括的なケース演習:

画像-20210221215011157

実装関連コード:

 

エントリからプロジェクトの戦闘までJavaをパッケージ化します。抽象クラスとインターフェイス; //このクラスを定義します抽象クラスpeople {private String name; private String age; public people(){} public people(String name、String age){this.name = name; this.age = age;} public abstract void eats(); //抽象メソッドを定義するpublicvoid setName(String name){this.name = name;} public void setAge(String age){this.age = age; } public String getName(){return name;} public String getAge(){return age;}} //アスリート抽象クラスの定義抽象クラスathletesextends people {publicathletes(){} publicathletes(String name、String age){ super(name、age);} //抽象メソッドpublicabstract void study();}インターフェイスspeakEnglish {public abstract void talk();} //抽象クラスcoachextends people {public Coach(){} public Coach(String name 、String age){super(name、age);} public abstract void tell();} //バスケットボール選手クラスBasketball_playerは選手を拡張します{publicBasketball_player(String name、String age){super(name、age);} @Override public void eats(){System.out.println( "バスケットボール選手は食べています... 。 ");} @Override public void study(){System.out.println("バスケットボール選手は学習しています... ");}} // Pingpangリモート動員クラスpingpangは、アスリートがspeakEnglish {public pingpang(String name、 String age){super(name、age);} @Override public void eats(){System.out.println( "テーブルテニス選手が食べています...");} @Override public void study(){System.out .println( "卓球選手は学んでいます...");} @Override public void talk(){System.out.println( "卓球選手は英語を話す練習をします.....。");}} //テーブルテニスコーチクラスpingpangCoachはコーチ実装を拡張しますspeakEnglish {public pingpangCoach(String name、String age){super(name、age);} @Override public void eats(){System.out.println( "卓球のコーチが食べています... ");} @Override public void tell(){System.out.println("卓球のコーチが教えています... ");} @Override public void talk(){システム.out.println( "口頭英語を練習するピンポンコーチ.....");}} //バスケットボールコーチクラスBasketballCoachはコーチを拡張します{publicBasketballCoach(String name、String age){super(name、age);} @Override public void eats(){System.out.println( "バスケットボールのコーチが食べています");} @Override public void tell(){System.out.println( "バスケットボールのコーチが教えています.....。 ");}}パブリッククラスの包括的なケースの実現{public static void main(String [] args){}}} @Override public void eats(){System.out.println( "バスケットボールのコーチが食べています");} @Override public void tell(){System.out.println( "バスケットボールのコーチが教えています...") ;}}パブリッククラスの包括的なケースの実現{publicstatic void main(String [] args){}}} @Override public void eats(){System.out.println( "バスケットボールのコーチが食べています");} @Override public void tell(){System.out.println( "バスケットボールのコーチが教えています...") ;}}パブリッククラスの包括的なケースの実現{publicstatic void main(String [] args){}}

終わり:

最近のJavaの学習に関連する概念を整理し、アイデアを明確にします。

エラーがありましたら訂正してください、終わりを見ていただきありがとうございます!

 

 

著者:Xbhog
このリンク:https//www.cnblogs.com/xbhog/p/14432822.html

 

おすすめ

転載: blog.csdn.net/m0_50180963/article/details/113986459