Javaパッケージ、継承と多形まとめ

6079 ワード

三つの柱
対象プログラムに向けて設計された三つの柱はパッケージ、継承、多状態である。
  • カプセル化:オブジェクトの属性と操作(またはサービス)を独立した全体として結合し、オブジェクトの内部実装の詳細を可能な限り隠す。適切なパッケージは、プログラムコードをより容易に理解し、維持することができ、また、プログラムコードの安全性を強化する。
  • public class A {
        String a;
    
        public A(String a) {
            this.a = a;
        }
    
        public String getA() {
            return a;
        }
    
        public void setA(String a) {
            this.a = a;
        }
    }
    
    public class B {
        public static void printB() {
            A a = new A("hello java!");
            System.out.println(a.getA());
        }
    }
    
    public class C {
        public static void main(String[] args) {
            B.printB();
        }
    }
    
    上のようにAとBをパッケージと呼ぶことができます。Aパッケージはデータaで、BパッケージはSystem.out.println()方法です。
  • 継承:汎用クラス(親クラス)を定義することができます。その後、このクラスをより特定のクラス(すなわち、サブクラス)に拡張します。既存のクラスに基づいて新しいクラスを作成することができます。既に存在しているクラスを継承すると、これらのクラスの方法とドメインを多重化することができる。この基礎の上で、新しい方法とドメインを追加して、種類の機能を拡充しました。キーワードのextensは、すでに存在しているクラスに新しいクラスが誕生していることを示しています。既に存在しているクラスは親または基質と呼ばれ、新しい種類はサブクラスまたは派生類と呼ばれます。
  • 多形:多形は親の変数がサブクラスのオブジェクトを指すことができることを意味する。オブジェクト指向言語では、インターフェースの様々な異なる実施形態が多状態である。多形性は、あなたが父親のオブジェクトを一つ以上の彼のサブオブジェクトに等しく設定する技術であり、値を付けた後、父親のオブジェクトは現在の割り当てられたサブオブジェクトの特性によって異なる方法で動作することができます。簡単に言えば、サブタイプのポインタを親タイプのポインタに割り当てることができます。
  • public class Animal {
        public Animal() {
    
        }
        public String toString(){
    
            return "I'm an animal!";
        }
    }
    
    public class Dog extends Animal {
        public Dog() {
        }
    
        @Override
        public String toString() {
            return "I'm a dog!";
        }
    }
    
    public class Test {
        public static void main(String[] args) {
            Animal animal = new Dog();
            Animal animal1 = new Animal();
            System.out.println(animal1.toString());
            System.out.println(animal.toString());
        }
     }
    動的結合
    Animal animal = new Dog();
      System.out.println(animal.toString());
    上記のコードはAnimalオブジェクトを表していますが、このオブジェクトの例はnew Dog()を参照してください。ここでは、インスタンスは、ステートメントタイプまたはそのサブタイプの構造方法を使用して作成することができるという概念がある。変数のインスタンスタイプは、変数によって参照されるオブジェクトの実際のクラスです。したがって、アニマルのインスタンスタイプは、Dugであり、new Dug()が作成したオブジェクトを指す。すなわち、オブジェクトが呼び出す方法(例えば、toString()は、動的バインディングと呼ばれる実際のタイプによって決定される。
    書き換える
  • は、親タイプと同じ署名と戻り値タイプをサブクラスで使用してこの方法を定義する必要がある方法を書き換える。子類は親から継承する方法で、親類を修正する方法を方法といいます。
  • 重負荷も、統一された対外インターフェースを用いて異なる機能を達成するものである。リロード方法の署名は、元の方法とは違っていなければならない。複数の同名の方法が存在することを許可することであり、これらの方法のパラメータは異なる。リロード方法は、プログラムがより明確であり、より読み取り可能であり、同じ機能を実行するが、異なるパラメータを有することができる。リロード方法は、異なるパラメータリストを有する必要があり、修正子に基づいてプロットされたリターン値タイプに基づいて方法を再ロードすることができません。一つの方法を呼び出すと、複数のマッチ結果があるかもしれません。コンパイラは自動的に最も正確なマッチングを探します。
  • public static int Sum(int a,int b){
       return a+b;
    }
    
    public static double Sum(double a,double b){
       return a+b;
    }
    曖昧呼び出し
    public static double Sum(int a,double b){
       return a+b;
    }
    
    public static double Sum(double a,int b){
       return a+b;
    }
    上記のように、Sum(1,2)を呼び出すと、上記の2つの方法のいずれかの呼び出しとなりますが、コンパイラが正確ではなく、コンパイルエラーが発生します。