この投稿では、Java のオブジェクト指向プログラミング (OOP) の 4 つの基本的な柱 について説明します。これらの中心原則は、コードをモジュール化して再利用可能、保守可能に構造化するのに役立ちます。この投稿は入門として機能し、今後のエントリでは、微妙な議論と例を使用して各概念をさらに深く掘り下げます。
覚えやすくするために、頭字語 「A PIE」 を使用します: A抽象化、P異型性、I継承、およびEカプセル化。
Java は、オブジェクト指向言語としてよく説明されますが、100% オブジェクト指向ではありません。 なぜ? Java のほとんどの要素はオブジェクト (クラス、オブジェクト、メソッドなど) を中心に展開しますが、プリミティブ型 (int、boolean、double など) も使用します。 🎜>オブジェクトではありません。
Java でプリミティブ型を保持することは、意図的な設計上の選択でした。その理由は次のとおりです:
メモリ効率: プリミティブ型は、対応するオブジェクト (整数やブール値など) と比較して、使用するメモリが少なくなります。
パフォーマンスの向上: オブジェクトの作成と参照管理のオーバーヘッドが回避されるため、プリミティブの操作が 高速化します。
利便性: プリミティブ型を使用すると、単純な場合、特に算術演算および論理演算を扱う場合にコードがすっきりします。
Java は、パフォーマンスとメモリ効率のためのプリミティブを提供すると同時に、これらの値をオブジェクトとして扱う必要がある場合に備えて ラッパー クラス (Integer など) も提供することでバランスをとっています。
内部ロジックを隠し、重要な機能のみをユーザーに公開することを意味します。これにより、ユーザーは根底にある複雑さを気にすることなく、高レベルでオブジェクトを操作できるようになります。 ATM を使用するものと考えてください。ATM が取引を処理するために銀行とどのようにやり取りするのかを知らなくても、引き出す金額を入力するだけで済みます。
Java では、抽象クラス と インターフェース は、必須メソッド を定義し、内部の詳細を子クラスまたは親クラス内に残すことで抽象化を実現します。ただしユーザーには隠されています。
例:abstract class Payment { // A method with concrete logic, hidden from the user. private void authenticate() { System.out.println("Authenticating payment..."); } // Abstract method that child classes must implement. abstract void processPayment(double amount); // Public method exposing only the necessary details. public void makePayment(double amount) { authenticate(); // Hidden complexity processPayment(amount); // Exposed to child classes System.out.println("Payment completed."); } } // Concrete class implementing the abstract method. class CreditCardPayment extends Payment { @Override void processPayment(double amount) { System.out.println("Processing credit card payment of ₹" + amount); } } public class TestAbstraction { public static void main(String[] args) { Payment payment = new CreditCardPayment(); // Polymorphism in action. payment.makePayment(1000.00); // Only high-level interaction. } }
複雑さはどこに隠されていますか?
抽象クラスはどのように役立ちますか?
ユーザーには何が表示されますか?
ポリモーフィズムにより、オブジェクトは状況に応じて異なる動作をすることができます。 Java は 2 種類のポリモーフィズムをサポートしています。
1.コンパイル時のポリモーフィズム (メソッドのオーバーロード): 同じ名前でパラメーターが異なる複数のメソッドを定義することで実現されます。
abstract class Payment { // A method with concrete logic, hidden from the user. private void authenticate() { System.out.println("Authenticating payment..."); } // Abstract method that child classes must implement. abstract void processPayment(double amount); // Public method exposing only the necessary details. public void makePayment(double amount) { authenticate(); // Hidden complexity processPayment(amount); // Exposed to child classes System.out.println("Payment completed."); } } // Concrete class implementing the abstract method. class CreditCardPayment extends Payment { @Override void processPayment(double amount) { System.out.println("Processing credit card payment of ₹" + amount); } } public class TestAbstraction { public static void main(String[] args) { Payment payment = new CreditCardPayment(); // Polymorphism in action. payment.makePayment(1000.00); // Only high-level interaction. } }
2.実行時ポリモーフィズム (メソッドのオーバーライド): サブクラスが、親クラスで宣言されたメソッドの特定の実装を提供するときに達成されます。
class Calculator { // Compile-time polymorphism (Overloading) int add(int a, int b) { return a + b; } int add(int a, int b, int c) { return a + b + c; } public static void main(String[] args) { Calculator calc = new Calculator(); System.out.println(calc.add(2, 3)); // Output: 5 System.out.println(calc.add(2, 3, 4)); // Output: 9 } }
コンパイル時ポリモーフィズムは add() メソッドをオーバーロードすることで示され、実行時ポリモーフィズムは sound() メソッドをオーバーライドすることによって示されます。
sound() メソッドは、オブジェクトのタイプに基づいて動作が異なります。 Animal のタイプは Animal ですが、実行時 で、Dog でオーバーライドされたメソッドが実行されます。
継承により、クラス (子) は別の クラス (親) のプロパティと動作を再利用できます。これにより、コードの再利用性が促進され、クラス間にIS-A 関係が確立されます。 Java は、曖昧さを避けるためにクラスを介した 多重継承 をサポートしていませんが、インターフェイスを介したそれは許可しています。
class Animal { void sound() { System.out.println("Animals make sounds."); } } class Dog extends Animal { @Override void sound() { System.out.println("Dog barks."); } } public class TestPolymorphism { public static void main(String[] args) { Animal animal = new Dog(); // Runtime polymorphism animal.sound(); // Output: Dog barks } }
この例では:
犬は動物から継承しています。つまり、犬は食べると吠えるの両方ができます。
これは コードの再利用を示しています。Dog クラスの Eat() メソッドを書き直す必要はありません。
カプセル化とは、データ (フィールド) とそれを操作するメソッドを 1 つのユニット (クラス) にバンドルすることを意味します。 また、フィールドをプライベートにして公開することで、データの隠蔽 も保証します。 ゲッターとセッターを通じて。
abstract class Payment { // A method with concrete logic, hidden from the user. private void authenticate() { System.out.println("Authenticating payment..."); } // Abstract method that child classes must implement. abstract void processPayment(double amount); // Public method exposing only the necessary details. public void makePayment(double amount) { authenticate(); // Hidden complexity processPayment(amount); // Exposed to child classes System.out.println("Payment completed."); } } // Concrete class implementing the abstract method. class CreditCardPayment extends Payment { @Override void processPayment(double amount) { System.out.println("Processing credit card payment of ₹" + amount); } } public class TestAbstraction { public static void main(String[] args) { Payment payment = new CreditCardPayment(); // Polymorphism in action. payment.makePayment(1000.00); // Only high-level interaction. } }
名前フィールドはプライベートです。つまり、クラスの外部から直接アクセスできません。
アクセスは パブリックゲッターおよびセッター を通じて提供され、データ隠蔽 を強制します。
Java の OOP 原則—抽象化、ポリモーフィズム、継承、およびカプセル化—は、モジュール式で保守可能で効率的なコードを作成するための基盤を形成します。これらの概念を理解すれば、複雑なシステムを設計して理解する準備が整います。
今後の投稿では、より微妙な例、ベスト プラクティス、面接に焦点を当てたヒントを使用して、これらの原則のそれぞれをさらに深く掘り下げていきます。乞うご期待!
Java の基礎
アレイインタビューの要点
Java メモリの基礎
Java キーワードの基礎
コレクション フレームワークの基本
コーディングを楽しんでください!
以上がJava で OOP をクラッキング: スライスして食べたいパイの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。