Javaのデフォルトや静的メソッドで

Javaのデフォルトや静的メソッドで

デフォルトおよびインターフェイスの静的メソッドを宣言することができます、JDK1.8の新機能です。2の出現は、より抽象クラスのようなインタフェースは、(次に関して両方が要約をしない)、そしてなぜ彼らは利便性を見えるもの生成、表示されないように、合理的な存在で、Javaと白が学ぶようになりました要約、欠点がなく、または2件のコメントセクションを指している願っています!

新しいJavaのデフォルトの方法薄暗いです

公式の答えデフォルトの方法では、既存のライブラリ・インタフェースに新しい機能を追加するために、インターフェイスの古いバージョンを使用して書かれたコードとのバイナリ互換性を確保することができます。
プレゼンテーションを退屈な外観は、簡単な例を挙げて、理解することは困難と思われます。インターフェースはクラスの多くによって実現され、非常に大きなプロジェクトがあると、それは安全な走行がスムーズです。突然、1日には、ほとんど問題にあった、またはより良い最適化があること、これらのクラスの増加を達成するために必要です。デフォルトのメソッドの前に表示され、唯一の抽象メソッド、および実装クラスで動作するように特定の定義を与える必要があり、それだけで目が直接追加する朝から晩まで、閉じていることを意味します。
しかし、インタフェースの特定の実装がデフォルトの方法で指定したメソッドが表示され、実装クラスとすることができ、自動的にデフォルトの方法を可能にする、私はちょうど内部インターフェイス上でこのデフォルトの最適化方法をしたい、すべての実装クラスを最適化するために行うことができます友人。私の例では、適切な場所でない場合はもちろん、純粋に個人的な理解は、ああ、私を修正してください。

package com.my.pac21;

/**
 * @auther Summerday
 */

interface Closable {
    void close();
    //假设是新增的默认方法
    default void makeSound() {
        System.out.println("peng!");
    }
}

interface Openable {
    default void makeSound() {
        System.out.println("peng!");
    }
}

class Window implements Closable {

    @Override
    public void close() {
        System.out.println("Window.close");
    }
}

public class Door implements Closable, Openable {

    @Override
    public void close() {
        System.out.println("Door.close");
    }

    //两个接口中包含同名的方法,需要重写,指定一个
    @Override
    public void makeSound() {
        System.out.println("need to override default methods");
    }

    public static void main(String[] args) {
        Closable cw = new Window();
        Closable cd = new Door();
        cw.close();//Window.close
        cd.close();//Door.close

        //实现默认方法
        cw.makeSound();//peng!
        cd.makeSound();//need to override default methods
    }
}

新しいJavaの静的メソッド薄暗いです

インターフェイスのインターフェイスでデフォルトのメソッドと静的メソッドが表示されますので、「すべての抽象メソッド」機能の喪失は、新しいデフォルトの方法を模索が完了した後、我々は静的メソッドの友人で始めること。私は必死に情報を見つけるために始めました。

Javaの8は、インタフェースに静的メソッドを宣言することが可能になった前に、それはコンパニオンユーティリティクラスでこれらのメソッドを配置するのが一般的でした。例えば、java.util.Collectionsクラスのjava.util.Collectionインタフェースに仲間であり、関連するJavaコレクションフレームワークインタフェースにおいてより適切であろう静的メソッドを宣言する。あなたは、もはや自分自身のコンパニオンユーティリティクラスを提供する必要がありません。代わりに、育成する良い習慣である適切なインタフェースの静的メソッドを、配置することができます。

これは新しい静的メソッドが存在しない場合に、それがどういう意味、私は、スタックオーバーフローの答えに見つけたもので、我々はいくつかのインターフェイスに表示される固定したい場合は、それは仲間のための実装クラスおよびインタフェースを定義する必要があります。インターフェースは、静的メソッドは、静的メソッドはインターフェースを介して直接呼び出すことができます表示されます。

package com.my.pac21;

/**
 * @auther Summerday
 */
public class Test {
    public static void main(String[] args) {
        int val1 = 5;
        int val2 = 6;
        //通过创建实现类的对象
        Countable b = new CountableCompanion();
        System.out.println(b.getNum(val1, val2));
        //直接通过接口调用
        Countable.getMul(val1,val2);
    }
}
interface Countable{
    //普通抽象方法
    int getNum(int a,int b);
    //静态方法
    static int getMul(int a,int b){
        return a*b;
    }
}
//实现接口的实现类
class CountableCompanion implements Countable{
    @Override
    public int getNum(int a,int b) {
        return a+b;
    }
}

私はこれが唯一の理解、比較的単純な例だと思います。

  • 抽象メソッドの一般的な状況:私は、私はメソッドの実装クラスの実装を定義し、最後にメソッドを呼び出すために実装クラスのインスタンスを作成することによって、最後の2つの値が考えられ、抽象メソッドにインターフェースを定義します。あなたが複数の実装クラスで実装された方法と同じ性質をしたい場合は、この方法は多くの問題で、実際には、想像してみてください。
  • staticメソッドの状況は:それは、直接インターフェイスの静的メソッドの定義で、インターフェイスを直接呼び出すことができます実装クラスの支援定義する必要はありませんああ、より快適に。

おすすめ

転載: www.cnblogs.com/summerday152/p/12142239.html