day08_オブジェクト向け_抽象クラスとインタフェース

5628 ワード

抽象クラス
抽象クラスの概要:
動物は具体的なものと定義すべきではなく、動物の中の食べる、寝るなども具体的ではない.具体的な機能ではない機能を抽象的な機能と呼び,1つのクラスに抽象的な機能があれば,そのクラスは抽象的なクラスでなければならない.
抽象クラスの特徴:
A:           abstract     
B:            ,                 
C:        

それは具体的ではないからです.抽象クラスには構造方法がありますが、インスタンス化できませんか?構造方法の役割は何ですか?サブクラスが親データにアクセスするための初期化D:抽象的なサブクラスa:抽象メソッドを書き換えたくない場合、このサブクラスは抽象クラスである.b:すべての抽象的な方法を書き換えます.このとき、サブクラスは具体的なクラスです.すなわち、抽象クラスのサブクラスが抽象クラスでない場合、親クラスのすべての抽象メソッドを書き換える必要があります.
抽象クラスのインスタンス化は,実際には具体的なサブクラスによって実現される.多態の方式です.Animal a = new Cat();
抽象クラスのメンバーの特徴:
≪メンバー変数|Member Variables|oraolap≫:変数でも定数でも構いません.構築方法:あります.サブクラスが親データにアクセスする初期化に使用します.メンバーメソッド:抽象的でも非抽象的でも構いません.
抽象クラスのメンバーメソッドのプロパティ:
A:抽象的な方法で子供にやらせることを強制します.B:非抽象メソッドサブクラスが継承することで、コード多重性が向上します.抽象クラスの抽象方法は具体的な実現を与えず、()である.の最後の部分
インタフェース
インタフェースの特徴:
A:インタフェースはキーワードinterfaceでinterfaceインタフェース名{}を表します.B:クラス実装インタフェースはimplementsでclassクラス名を表します.implementsインタフェース名{}C:インタフェースはインスタンス化できません.では、インタフェースはどのようにインスタンス化しますか.マルチステート方式でインスタンス化します.D:インタフェースのサブクラスa:抽象クラスであってもよい.しかし、意味はあまりありません.b:具体的なクラスでもいいです.インタフェース内のすべての抽象メソッドを書き換える.(推奨案)
以下のようになります.
A:具体的な類多態(ほとんどない)B:抽象類多態(常用)C:インタフェース多態(最も常用)
インタフェースメンバーの特徴
メンバー変数;定数でしかなく、静的です.デフォルトの修飾子:public static final推奨:自分で手動で与えます.構築方法:インタフェースに構築方法がありません.メンバーメソッド:抽象メソッドのみです.デフォルトの修飾子:public abstract推奨:自分で手動で与えます.
すべてのクラスはデフォルトでクラス:Objectから継承されます.クラスObjectはクラス階層のルートクラスです.各クラスは、スーパークラスとしてObjectを使用します.
classic coding:
interface Inter {
    public int num = 10;
    public final int num2 = 20;
    public static final int num3 = 30;
    
    //  :   
    //public Inter() {}
    
    //          
    //public void show() {}

    //abstract void show(); //  public
    public void show(); //  abstract
}

//   +Impl             
/*
class InterImpl implements Inter {
    public InterImpl() {
        super();
    }
}
*/

class InterImpl extends Object implements Inter {
    public InterImpl() {
        super();
    }
    
    public void show() {}
}

//   
class InterfaceDemo2 {
    public static void main(String[] args) {
        //    
        Inter i = new InterImpl();
        System.out.println(i.num);
        System.out.println(i.num2);
        //i.num = 100;
        //i.num2 = 200;
        //System.out.println(i.num); //       num   
        //System.out.println(i.num2);//       num2   
        System.out.println(Inter.num);
        System.out.println(Inter.num2);
        System.out.println("--------------");
    }
}

抽象クラスとインタフェースの違い:
A:メンバー区別抽象クラス:メンバー変数:変数可能、定数構築方法:メンバーメソッドあり:抽象可能、非抽象インタフェース可能:メンバー変数:定数メンバーメソッドのみ:抽象のみ
B:関係区別クラスとクラス継承、単一継承クラスとインタフェース実現、単一実現、多実現インタフェースとインタフェース継承、単一継承、多継承
C:設計理念区別抽象類が継承されているのは「is a」の関係である.抽象クラスで定義されるのは、継承システムの共通機能です.インタフェースが実装されるのは,「like a」の関係である.インタフェースには、継承システムの拡張機能が定義されています.
まとめ
1:finalキーワード(把握)(1)は最終的な意味で,クラス,メソッド,変数を修飾することができる.(2)特徴:A:修飾されたクラスは継承できません.B:修飾の仕方は、書き換えられません.C:修飾変数は定数です.(3)面接関連:A:ローカル変数a:基本タイプ値は変更できないb:参照タイプアドレス値は変更できないが、オブジェクトの内容は変更可能なB:初期化タイミングa:一度しか初期化できない.b:よくある値定義の場合.(推奨)構造方法中.
2:多態(把握)(1)同じオブジェクトが異なる時点で現れる異なる状態.(2)多態の前提:A:継承または実現関係がある.B:書き直す方法があります.C:親または親インタフェースリファレンスが子オブジェクトを指します.
         :
        a:     
            class Fu {}
            class Zi extends Fu {}
            
            Fu f = new Zi();
        b:     
            abstract class Fu {}
            class Zi extends Fu {}
            
            Fu f = new Zi();
        c:    
            interface Fu {}
            class Zi implements Fu {}
            
            Fu f = new Zi();
(3)          
    A:    
             ,     
    B:    
                       
    C:    
             ,     
    D:    
             ,     
        
       ?
                 。
(4)     :
    A:        (    )
    B:        (    )
(5)     :
               。
    
      :
                ,        。
(6)      
    A:    
            
    B:    
            
(7)               
(8)     
    A:    
    B:       

3:抽象類(掌握)(1)複数の共通性のあるものを一つの類に抽出するのが継承の仕方である.しかし、この複数の共通性のあるものは、時には、方法が同じであることを宣言することがありますが、方法体です.すなわち,メソッド宣言は同じであるが,具体的なオブジェクトごとに具体的な実装時に内容が異なる.したがって,これらの共通の方法を定義する際には,具体的な方法体を与えることはできない.具体的な方法体がない方法は抽象的な方法である.クラスに抽象メソッドがある場合は、クラスを抽象クラスとして定義する必要があります.(2)抽象クラスの特徴A:抽象クラスと抽象メソッドはキーワードabstractで修飾しなければならないB:抽象クラスには抽象メソッドがあるとは限らないが、抽象メソッドがあるクラスは抽象クラスCに違いない:抽象クラスはD:抽象クラスのサブクラスa:抽象クラスをインスタンス化できない.b:具体的なクラスです.このクラスは抽象クラスのすべての抽象メソッドを書き直さなければなりません.(3)抽象クラスのメンバーの特徴:A:メンバー変数に変数があり、定数があるB:構造方法に構造方法があるC:メンバー方法に抽象があり、非抽象(4)抽象クラスの練習があるA:猫犬実例練習B:先生実例練習C:学生実例練習D:従業員実例練習(5)抽象クラスのいくつかの小さな問題があるA:抽象クラスに構造方法があり、実例化できない.では、構造方法は何に使いますか.サブクラスが親データにアクセスするための初期化B:1つのクラスが抽象的な方法がないのに抽象的なクラスとして定義されている場合、何の役に立ちますか?作成オブジェクトC:abstractとどのキーワードが共存しないようにa:final競合b:private競合c:staticは意味がありません
4:インタフェース(把握)(1)猫犬のケースを振り返ると、基本的な機能はいくつかしか提供されていません.例えば、猫が火の輪をくぐったり、犬が高跳びをしたりする機能は、動物自体が備えているものではなく、後の培養で訓練されたもので、javaはインタフェース表示を提供しています.(2)インタフェースの特徴:A:インタフェースはキーワードinterfaceでinterfaceインタフェース名{}B:クラス実装インタフェースはimplementsでclassクラス名implementsインタフェース名{}C:インタフェースはD:インタフェースの実装クラスa:抽象クラスをインスタンス化できない.b:インタフェース内のすべての抽象メソッドを書き換える必要がある特定のクラスです.(3)インタフェースのメンバー特徴:A:メンバー変数は定数デフォルト修飾子のみ:public static final B:構築方法構築方法なしC:メンバーメソッドは抽象的なデフォルト修飾子のみ:public abstract(4)クラスとクラス、クラスとインタフェース、インタフェースとインタフェースA:クラスとクラスの継承関係、単一継承のみ、多層継承B:クラスとインタフェースの実現関係、単に実現してもよいし,多く実現してもよい.また、1つのクラスを継承すると同時に、複数のインタフェースCを実現することもできます:インタフェースとインタフェースの継承関係は、単に継承することもできますし、複数継承することもできます(5)抽象クラスとインタフェースの違い(自分で補完することもできます)?A:メンバー区別抽象クラス:インタフェース:B:関係区別:クラスとクラス:クラスとインタフェース:インタフェースとインタフェース:C:設計理念の異なる抽象クラス:is a、抽象クラスで定義されているのは共通機能です.インタフェース:like a、インタフェースで定義されているのは拡張機能です.(6)练习:A:猫犬ケース、高跳び机能B:先生と学生ケース、吃烟机能0