継承、多態、抽象について話します

2404 ワード

長い間考えて、最初の文章は何を書くのが良くて、自分は技術の白で、どんな深い技術を話すことができなくて、それでは私の知っているいくつかJAVAの技術の知識について話しに来ます.
継承
Javaはオブジェクト向けプログラミング言語です.(オブジェクト向けとは何か、ここではくどくど言わない)、Javaプログラムとは何か.オブジェクトを継承・組み合わせることによって形成される一連の問題解決策である.継承によってJAVA言語のすべての特性を見渡すことができる.継承はオブジェクト向けプログラミング技術の礎である(複雑な問題を単純化する).後述する多態と抽象の前提でもある.通俗的に言えば、継承はあるオブジェクトが別のオブジェクトから属性を取得する過程(private属性以外)であり、クラス間にはいわゆる等級関係が形成される.継承には以下のいくつかの特徴がある.
  • 単一継承(誰が「母」なのかの問題を解決)
  • IS-A問題(継承と組合せの問題を解決)
  • Javaのすべてのクラスは、Objectベースクラスを暗黙的に継承します.
  • extendsとImplementキーワード
  • マルチステート
    マルチステートとは?同じ行為が異なる表現形態や形式を持つ能力は公式の解釈であり、霧のように聞こえる.私の理解は:多態は対象の多種の表現形式であり、すなわち向上転換である.マルチステートの前提は次のとおりです.
  • 継承
  • 動的バインド
  • 動的バインドとは何かと聞かれると、「Javaプログラミング思想」はこのような解釈を示しています.
    実行時にオブジェクトのタイプに基づいてバインドされ、それとは逆に前期バインドされ、コンパイル時にタイプが決定されます.>
    Javaはダイナミックプログラミング言語ではなく、どうやってダイナミックバインドを実現するのかという質問もあります.これはJava言語の特徴である反射メカニズムです(後述します)
    栗を見る:
    public class Animal{
        public Animal(){
        }
        public void move(){
            System.out.println("Animal move");
        }
    }
    
    public class Dog extends Animal{
          public String name;
          public Dog(String name){
                this.name=name;
          }
          public void move(){
               System.out.println(name+"move");
          }
          public void eat(){
                System.out.println(name+"eat");
          }
    }
    public class Test{
        public static void main(String[] args){
              Animal dog1=new Dog("dog1");
              dog1.move();
              //dog1.eat();  
              Dog dog2=new Dog("dog2");
              dog2.move();
              dog2.eat();
        }
    }
    

    以上のプログラムを実行し、出力結果はdog 1である.move; dog2.move; dog2.eat;
  • なぜAnimalオブジェクトdog 1がdog 1を出力するのか.アニマルではなくmove、これはJAVA言語が実行されている間にdog 1が指すオブジェクトがDogであることを確定し、DogがAnimal
  • にアップグレードされたためである.
  • dog 1参照は依然としてAnimalであり、Animalにはeat()メソッドがないのでdog 1.eat()は呼び出せません.前に継承したのを覚えていますか、dog 1 IS-A Animalですが、Animal is not a Dogです.

  • 抽象
    抽象クラス、私の理解は、具体的なオブジェクトを作成することができないクラスは抽象クラスで、抽象クラスはただ1つの特殊なクラスで、JAVAの中のクラスである以上、それではそのすべての特徴を持っています:継承、多態、書き換えの重荷など;
    機能:
  • 論理インタフェースと実現の分離、構造化;
  • は完全にデカップリングされ、向上した.

  • 適用:
  • アダプタ設計モード;
  • 工場設計モデル;

  • 特徴:
  • abstractメソッドを含むクラスはすべて抽象クラスであり、抽象クラスはabstractで
  • を修飾する.
  • 抽象クラスはインスタンス化できないため、継承されなければならない.
  • インタフェースは極度に抽象化されたクラスである.
  • 任意のサブクラスは、親クラスの抽象メソッドを書き換える必要があります.詳細:
  • 詳細は「Javaプログラミング思想」
  • を参照してください.