Java の 3 つの主要な機能: カプセル化、継承、ポリモーフィズム

angryTom
リリース: 2019-07-17 08:41:10
オリジナル
2822 人が閲覧しました

オブジェクト指向の 3 つの主要な特徴は、カプセル化、継承、ポリモーフィズムであることはわかっています。ただし、これらの概念について常に混乱することがあります。これらの概念は、将来の抽象化指向プログラミングのための強固な基盤を築くために以下に整理されています。

カプセル化の概念は依然として理解しやすいです。クラスを定義できれば、カプセル化の概念は完全に理解できたと思います。以下に定義されるクラスはデータのカプセル化です。 #継承の利点は、コードの再利用です。継承されたサブクラスには、親クラスのすべてのプロパティとメソッドが自動的に含まれます。したがって、既存のクラスを継承するとは、これらのクラスのメソッドとフィールドを再利用することになります。

これに基づいて、サブクラスは新しいニーズを満たすためにいくつかの新しいメソッドとフィールドを追加することもできます。これは Java プログラミングの中核となるテクノロジーです。

では、相続が必要かどうかはどのように判断すればよいのでしょうか。 「is-a」関係は継承の明らかな特徴です。この文の意味は次のように解釈できます。 Student が person を継承する理由は、Student が person であるためです。そのような関係がなければ、相続の必要はありません。これはリスコフ置換原則の定義でもあり、サブタイプは親タイプを置換できなければなりません。 スーパークラスを拡張してサブクラスを定義する場合、サブクラスとスーパークラスの違いを指摘するだけで済みます。したがって、クラスを設計する際には、一般的なメソッドをスーパークラスに配置し、特殊な用途のメソッドをサブクラスに配置する必要があり、一般的な関数をスーパークラスに配置するというアプローチは、オブジェクト指向プログラミングでは非常に一般的です。

動的バインディングには、既存のコードを変更せずにプログラムを拡張できるという非常に重要な機能があります。したがって、ポリモーフィズムはオープンとクローズの原則の基礎です。

以下は、継承とポリモーフィック実装の具体的な例です。

abstract は抽象キーワードです。 (具象クラスから継承するよりも抽象クラスから継承する方が適切です)。

public abstract class Person {  // 抽象类
    private String name;  // 私有变量
    
    public String getName() {  // Getter方法
        return name;
    }    public void setName(String name) {  //Setter方法
        this.name = name;
    }        
    public Person(String name) {  // 构造函数,用于初始化name
        super();        this.name = name;
    }    public abstract String getDesc();  // 抽象类中的抽象方法。  只有声明,没有具体实现。
        public String toString(){      // toString方法覆盖了Object类的toString方法
         return name + getDesc();
      }

}
ログイン後にコピー

extends は継承されたキーワードです。 Student は Person を継承するため、Student には name 属性があります。

public class Student extends Person {  // 继承类
    private String major; // 新增加的数据    

    public String getMajor() {        return major;
    }    public void setMajor(String major) {        this.major = major;
    }    

    public Student(String name,String major) { // 构造函数用于初始化
        super(name);   // 调用超类构造函数
        this.major = major;
    }

    @Override    public String getDesc() {  // 必须实现超类中的抽象方法        // TODO Auto-generated method stub
        return " : a student, major is " + major;
    }
ログイン後にコピー

スーパークラスを継承するサブクラスは、(どの実装方法であっても) スーパークラスの抽象メソッドの定義を実装する必要があります。 。

public class Employee extends Person{
    private double salary;
    public double getSalary() {
        return salary;
    }public void setSalary(double salary) {
        this.salary = salary;
    } 
   public Employee(String name, double salary) {
       super(name);
       this.salary = salary;
    }

    @Override
    public String getDesc() {        // TODO Auto-generated method stub
        return " :a employee, salary is " + salary;
    }
}
ログイン後にコピー
public class Test {    public static void main(String[] args) {        // TODO Auto-generated method stub
        Person[] p=new Person[2];    
        p[0]=new Student("Mark", "IT");
        p[1]=new Employee("Jerry", 2000);        for (Person person : p) {
            System.out.println(person.getName()+person.getDesc());
        }
    }

}
ログイン後にコピー
実行結果

この例から、カプセル化なしでは継承がないこともわかります。継承がなければ、いわゆるポリモーフィズムは存在しません。 カプセル化、継承、ポリモーフィズム (特にポリモーフィズム) を理解することは、デザイン パターンを理解するための基礎です。

Java チュートリアルの詳細については、次のサイトをご覧ください:


Java チュートリアル

Java の 3 つの主要な機能: カプセル化、継承、ポリモーフィズム

以上がJava の 3 つの主要な機能: カプセル化、継承、ポリモーフィズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート