オブジェクト指向プログラミングの3つの特徴:カプセル化継承ポリモーフィズム

パッケージ

クラスの一部の情報はクラス内に隠されており、外部プログラムが直接アクセスすることはできません。隠された情報の操作とアクセスは、クラスが提供するメソッドを介して実現できます。つまり、オブジェクトの情報を非表示にし、アクセスインターフェイスを終了します。クラスオブジェクトを操作して直接目標を達成するために、特定の実装を十分に理解する必要はなく、クラスの属性とメソッドの特定の実装は外部からは見えません。便利なだけでなく、保護にもなります。

例えば

public class Student {
    
    
    private int id;//id属性私有化
    private String name;//name属性私有化

    //获取id的方法
    public int getId() {
    
    
        return id;
    }

    //设置id的方法
    public void setId(int id) {
    
    
        this.id = id;
    }

    //获取name的方法
    public String getName() {
    
    
        return name;
    }

    //设置name的方法
    public void setName(String name) {
    
    
        this.name = name;
    }
}

 
 

継承

継承は、既存のクラスの定義を基礎として使用して新しいクラスを作成するテクノロジです。新しいクラスの定義では、新しいデータや新しい関数を追加したり、親クラスの関数を使用したりできますが、親を選択的に継承することはできません。クラス。以前のコードは、継承を使用することで非常に簡単に再利用できます。

継承については、次の3つの点に注意してください。

  • サブクラスには、親クラスオブジェクトのすべてのプロパティとメソッド(プライベートプロパティとプライベートメソッドを含む)がありますが、親クラスのプライベートプロパティとメソッドには、サブクラスからアクセスできません。

  • サブクラスは独自のプロパティとメソッドを持つことができます。つまり、サブクラスは親クラスを拡張できます。

  • サブクラスは、独自の方法で親クラスのメソッドを実装できます。
     
     

多形性

多型とは、その名前が示すように、オブジェクトに複数の状態があることを意味します。具体的には、親クラスの参照は子クラスのインスタンスを指します。

ポリモーフィズムの定義

プログラムで定義された参照変数が指す特定のタイプを参照し、参照変数を介して発行されたメソッド呼び出しは、プログラミング時には決定されませんが、プログラムの実行中に決定されます。つまり、のインスタンスオブジェクトです。参照変数が指すクラス。参照変数によって発行されたメソッド呼び出しがクラスに実装されているメソッドであるメソッドは、プログラムの実行中に決定する必要があります。

ポリモーフィズムの利点

特定のクラスはプログラムの実行時に決定されるため、参照変数はソースコードを変更せずにさまざまな異なるクラス実装にバインドできます。これにより、参照によって呼び出される特定のメソッドがそれに応じて変更されます。変更プログラムコードは、プログラムの実行時にバインドされた特定のコードを変更できるため、プログラムは複数の実行状態(ポリモーフィズム)を選択できます。

多型の特徴

  • オブジェクトタイプと参照タイプの間には、継承(クラス)/実装(インターフェイス)の関係があります。
  • 参照型変数によって発行されたメソッドが、プログラムの実行中にクラスを決定する必要があるメソッドを呼び出すメソッド。
  • ポリモーフィズムは、「子クラスにのみ存在し、親クラスには存在しない」メソッドを呼び出すことはできません。
  • サブクラスが親クラスのメソッドをオーバーライドする場合、サブクラスがカバーするメソッドが実際に実行されます。サブクラスがスーパークラスのメソッドをオーバーライドしない場合、スーパークラスのメソッドが実行されます。

ポリモーフィズムの実装

Javaには、継承(複数のサブクラスによって同じメソッドを書き換える)とインターフェース(インターフェースを実装し、インターフェースで同じメソッドをオーバーライドする)の2つの形式のポリモーフィズムがあります。
 

例えば

public class Animal {
    
    
    int id = 1;
    public void name(){
    
    
        System.out.println("动物");
    }
}
class Cat extends Animal{
    
    
    int id = 2;
    public void name(){
    
    
        System.out.println("猫");
    } 
}
//子类对象的多态性使用前提:1.要有类的继承 2.要有子类对父类方法的重写
public class Test {
    
    
    public static void main(String[] args) {
    
    
    	//子类对象的多态性:父类的引用指向子类对象
          Animal a = new Cat();//向上转型
          
        //虚拟方法调用:通过父类的引用指向子类对象的实体,调用方法时,实际执行子类重写父类的方法
          a.name();//输出:猫
          
        //输出的是Person对象的id属性
          System.out.println(p.id);//输出:1
    }
}

おすすめ

転載: blog.csdn.net/weixin_43901865/article/details/112672546