抽象類、密封類及びインタフェースの心得

7312 ワード

1、抽象クラス
例:
abstract class Animal{                     //      Animal    
    public abstract void bark();         //    :  
}
class Dog extends Animal{          //          
    public void bark(){
        System.out.println("wang");
    }
}

なぜ抽象クラスが必要なのですか?
1つの親にとって、メソッドが親で実装されても意味がない場合は、子の状況に応じて異なる実装が必要です.では、現在のメソッドを抽象メソッドとして宣言することができ、抽象メソッドを含むクラスを抽象クラスと呼ぶことができます.抽象メソッドを含むクラスを抽象クラスと呼びます.抽象的な方法はabstractによって修飾される.クラスもabstractで修飾する必要があります.の抽象クラスでは、非抽象的な方法があります.抽象クラスはインスタンスオブジェクトを作成できません.
抽象メソッド
抽象クラス内部では実現しない.現在の抽象クラスを継承するクラスがある場合は、実装する必要があります.抽象メソッドはprivateで修飾できません.アクセス修飾修飾修飾子を追加しない場合は、デフォルトはpublicです.
抽象クラスの派生クラス:
  • が一般クラスであれば、抽象クラスの抽象メソッドを実装する必要があります.
  • 抽象クラスであれば、ベースクラスの抽象メソッドを実装しなくてもよい.2、抽象クラスであれば、ベースクラスの抽象方法を実現しなくてもよい.

  • 抽象クラスと一般クラスの違い
    1、抽象クラスはインスタンス化できない2、抽象メソッドはpublicまたはprotectedでなければならない、または3を書かない、抽象クラスはabstractによって修飾される4、抽象メソッドは抽象クラスで実現できない
    2、密封類
    例:
    final  class Person {
        private String name;
        private int age;
        public Person() {
            System.out.println("Person init()");
        }
    
        public  void fun1() {
            System.out.println("Person init()");
        }
    }
    
    class Student extends Person {
    
        public void fun1() {
            System.out.println("Person init()");
        }
    }
    

    シール類を使う理由は?
    クラスがfinalに修飾されたとき.シール類と呼ぶ.このクラスはベースクラスには作用せず,派生クラスがfinalによって修飾されてもだめである.意図的な派生を防ぐことができますしたがって,このメソッドがサブクラスで上書きされることを明確に禁止したい場合にのみ,メソッドをfinalに設定する.すなわち,親のfinalメソッドはクラスに覆われてはいけない,すなわち,子クラスには親とそっくりのメソッドは存在できない.
    3、インタフェース
    インタフェースはJAVAプログラミング言語で抽象的なタイプであり、抽象的な方法の集合であり、インタフェースは通常interfaceで宣言される.1つのクラスは、インタフェースを継承することによって、インタフェースの抽象的な方法を継承します.インタフェースはクラスではなく、インタフェースを記述する方法はクラスと似ていますが、異なる概念に属しています.クラスは、オブジェクトのプロパティとメソッドを記述します.インタフェースには、クラスが実装する方法が含まれます.インタフェースを実装するクラスが抽象クラスでない限り、クラスはインタフェース内のすべてのメソッドを定義します.インタフェースはインスタンス化できませんが、実装できます.インタフェースを実装するクラスは、インタフェースに記述されているすべてのメソッドを実装する必要があります.そうしないと、抽象クラスとして宣言する必要があります.
    インタフェースとクラスの違い
    1、インタフェースはオブジェクトをインスタンス化するために使用できませんが、抽象クラスには一部の非抽象的な方法があります.2、インタフェースの构造方法がありません.3、インタフェース内のすべての方法は抽象的な方法でなければならない.4、インタフェースのメンバー変数とメンバーメソッドのデフォルトはpublic static finalとpublic abstract 5であり、インタフェースはクラスに継承されるのではなく、クラスによって実現される.6、1つのクラスは1つの抽象クラスしか継承できないが、インタフェースは同時に複数のクラスを継承することをサポートする.
    Cloneableインタフェース
    JavaソースでCloneableの最下位は空のコードですが、なぜ必要なのでしょうか.
    public interface Cloneable {
    }
    
    

    cloneは、スタック内で元のオブジェクトと同じオブジェクトをクローン化し、そのオブジェクトのアドレスに新しい参照を付与するタグとして機能します.Javaのクラスでclone機能を実装するには、Cloneableインタフェースを実装する必要があります.そうしないと、clone()を呼び出すと、CloneNotSupportedException例外が報告されます.Javaのすべてのクラスはjavaをデフォルトで継承します.lang.Objectクラスjava.lang.Objectクラスには、Objectオブジェクトのコピーを返すメソッドclone()があります.説明するのは2つあります.1つは、コピーオブジェクトが参照ではなく新しいオブジェクトを返すことです.2つ目は、コピーオブジェクトとnewオペレータで返される新しいオブジェクトの違いです.このコピーには、オブジェクトの初期情報ではなく、元のオブジェクトの情報が含まれています.クラスがObject内で定義されたclone()メソッドを書き換える場合、Cloneableインタフェースを同時に実装する必要があります.そうしないと、例外が放出されます.つまり、Cloneableインタフェースはclone()を合法的に呼び出す識別子にすぎません.
    Comparableインタフェース
    Comparableインタフェースは汎用インタフェースであり、比較器である.このインタフェースは、実装された各クラスのオブジェクトを強制的に並べ替えます.このソートはクラスの自然ソートと呼ばれ、クラスのcompareToメソッドはその自然比較メソッドと呼ばれます.
    Comparatorインタフェース
    Comparatorも比較インタフェースであり、クラスの順序を制御する必要があり、クラス自体がソートをサポートしていない(すなわち、Comparableインタフェースが実装されていない)場合は、「クラスの比較器」を構築してソートすることができ、この「比較器」はComparatorインタフェースを実装するだけでよい.すなわち,コンパレータを実装することによって新しいコンパレータを作成し,このコンパレータによってクラスをソートすることができる.
    この2つの比較用インタフェースの違い
    Comparableはクラス内比較器と考えられ、Comparableインタフェースを実現したクラスには、これらのクラスが自分と比較できるという特徴があり、具体的には別のComparableインタフェースを実現したクラスとどのように比較するかは、comparareToメソッドの実現に依存する.Comparatorはクラス外比較器と考えることができ、1つのオブジェクトは自分と自分の比較をサポートしない(Comparableインタフェースは実現していない)が、2つのオブジェクトを比較したい場合はComparatorインタフェースを使用することができる.