ホームページ  >  記事  >  Java  >  JAVAインターフェースと抽象クラスの詳細な分析

JAVAインターフェースと抽象クラスの詳細な分析

WBOY
WBOY転載
2022-07-08 14:42:251645ブラウズ

この記事では、java に関する関連知識を提供します。主にインターフェイスと抽象クラスに関連する問題を整理します。複数のクラスからクラスを派生する必要がある場合は、すべてのクラスを継承します。 JAVAには多重継承がなく、インターフェースで実装する必要があるので、一緒に見ていきましょう。

JAVAインターフェースと抽象クラスの詳細な分析

# 推奨学習: 「

Java ビデオ チュートリアル

インターフェース

概要

    複数のクラスからクラスを派生する必要がある場合は、
  1. すべてのプロパティとメソッドを継承します。JAVA には多重継承がなく、インターフェイス実装を使用する必要があります。複数のクラスから一部を抽出します。共通の動作特性
  2. であり、それらの間には存在関係はありません。また、
  3. を達成するためにインターフェイスを使用する必要があります。インターフェイスの本質は 契約、仕様です。
  4. 使用

インターフェイスで

interface
    を使用して定義します
  1. インターフェイスとクラスは 2 つの異なる構造です
  2. インターフェイス内
  3. コンストラクターを定義できません
  4. (つまり、インスタンス化できません)
  5. インターフェースはクラスを通じて実装されます
  6. JAVA クラスは複数のインターフェース形式を実装できます:
  7. class AA extends BB インターフェース CC、DD
  8. インターフェースは相互に継承でき、多重継承が可能です
  9. インターフェースはポリモーフィズムを実現しています
  10. public class UsbTest {
        public static void main(String[] args) {
            Computer com =new Computer();
            Flash flash=new Flash();
            com.transferData(flash); // USB usb =new Flash()
            com.transferData(new Printer());
            /*
    		* U盘开始工作
    		* 传输数据
    		* U盘结束工作
    		* 打印机开始工作
    		* 传输数据
    		* 打印机结束工作
    		* 
    		* */
        }}class Computer{
        public void transferData(USB usb){
            usb.start();
            System.out.println("传输数据");
            usb.stop();
        }}interface USB{
        void start();
        void stop();}class Flash implements USB{
    
        @Override
        public void start() {
            System.out.println("U盘开始工作");
        }
    
        @Override
        public void stop() {
            System.out.println("U盘结束工作");
    
        }}class Printer implements USB{
    
        @Override
        public void start() {
            System.out.println("打印机开始工作");
    
        }
    
        @Override
        public void stop() {
            System.out.println("打印机结束工作");
    
        }}
  11. JDK8 の書き方
  1. インターフェースで定義された
static メソッド
    は、インターフェースを通してのみ呼び出すことができます
  • through実装クラス オブジェクトはインターフェイスにデフォルト メソッドを実装できます。
  • サブクラス (または実装クラス) によって継承された親クラスと実装されたインターフェイスが同じ名前と同じパラメーターを持つメソッドを宣言している場合、サブクラスがメソッドをオーバーライドしません。呼び出されたメソッドは、親クラスと同じ名前とパラメータを持つメソッドです。
public class JDK8Test {
    public static void main(String[] args) {
        SubClass sub =new SubClass();
        CompareA.methods1();
        sub.methods2();
        /*
        * Compare 北京
		* Compare 上海
        */
    }}class SubClass implements CompareA{}interface CompareA{
    public static void methods1() {
        System.out.println("Compare 北京");
    }
    public default void methods2() {
        System.out.println("Compare 上海");
    }}
  • エージェント モード
  • プロキシ モードは、このオブジェクトへのアクセスを制御する他のオブジェクトのプロキシ

    1. public class NetWorkTest {
          public static void main(String[] args) {
              Server server=new Server();
              ProxyServer proxyServer=new ProxyServer(server); // 放的是被代理对象进去
              proxyServer.browse(); // 调用的是代理对象,但结果是真实对象的方法被调用
              /*
              * 检查工作
      		* 真实服务器访问网络
              */
          }}interface NetWork{
          void browse();}// 被代理类class Server implements NetWork{
      
          @Override
          public void browse() {
              System.out.println("真实服务器访问网络");
          }}// 代理类class ProxyServer implements NetWork{
          private NetWork work;
          public ProxyServer(NetWork work){
              this.work=work;
          }
          public void check(){
              System.out.println("检查工作");
          }
      
          @Override
          public void browse() {
              check();
              work.browse();
          }}
    2. 内部クラス

    JAVA では、クラス A を別のクラス B で宣言できます。の場合、クラス A は内部クラス、クラス B は外部クラス

      内部クラス分類
    1. メンバー内部クラス
      static
      • 非静的
      • #ローカル内部クラス
      • ##メソッド内部
      ##コードブロック内部
    • ##コンストラクター内部
      • #インスタンス変換内部クラス オブジェクト
      • public class InnerClassTest {
            public static void main(String[] args) {
                // 实例化Dog,静态类
                Pseson.Dog dog=new Pseson.Dog();
                dog.eat();
                // 吃骨头
                // 实例化Cat,非静态类
                Pseson p1 =new Pseson();
                Pseson.Cat cat=p1.new Cat();
                cat.eat();
                // 猫吃鱼
            }}class Pseson{
            String name;
            int age;
            public void eat(){
                System.out.println("吃饭");
            }
            static class Dog{
                String name;
                int age;
                public void eat(){
                    System.out.println("吃骨头");
                }
            }
            class Cat{
                public void eat(){
                    System.out.println("猫吃鱼");
                }
            }}
      外部クラス構造の呼び出し
    public class InnerClassTest {
        public static void main(String[] args) {
            // 实例化Cat,非静态类
            Pseson p1 =new Pseson();
            Pseson.Cat cat=p1.new Cat();
            cat.eat();
            cat.display("小花");
            /*
            * 小花
            * 波斯猫
            * 人
            */ 
        }}class Pseson{
        String name="人";
        int age;
        public void eat(){
            System.out.println("吃饭");
        }
        static class Dog{
            String name;
            int age;
            public void eat(){
                System.out.println("吃骨头");
            }
        }
        class Cat{
            String name="波斯猫";
            public void eat(){
                System.out.println("猫吃鱼");
            }
            public void display(String name){
                System.out.println(name); // 方法中name
                System.out.println(this.name); // 内部类中name
                System.out.println(Pseson.this.name); // 外部类中name
    
            }
        }}
    1. インターフェイスと抽象クラス
    1. # 類似点: インスタンス化できません。どちらも抽象メソッドを含みます。継承可能です。
    相違点: 抽象クラスにはコンストラクターがあり、インターフェイスにはコンストラクターがありません。抽象クラスにはコンストラクターのみが含まれます。インターフェイスは単一の継承ですが、インターフェイスは複数の継承を持つことができます。抽象クラスは継承を拡張し、インターフェイスは実装を実装します。
    1. 推奨学習: 「
    Java ビデオ チュートリアル

    以上がJAVAインターフェースと抽象クラスの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。