Javaの概念理解ポリモーフィズムのまとめ
この記事は、java に関する関連知識を提供します。主に Java のポリモーフィズムの詳細な説明について説明します。継承関係により、サブクラスは親クラスの特性を継承し、いくつかの新しい機能を追加できます。サブクラスは親クラスを特殊化したものです。サブクラスの各インスタンスは親クラスのインスタンスですが、その逆は当てはまりません。皆様のお役に立てれば幸いです。
推奨学習: 「java ビデオ チュートリアル 」
1. ポリモーフィズムの概念
継承関係サブクラスは親クラスの特性を継承し、いくつかの新しい特性を追加できます。サブクラスはその親クラスを特殊化したものであり、サブクラスのすべてのインスタンスはその親クラスのインスタンスですが、その逆は当てはまりません。たとえば、すべての円は幾何学オブジェクトですが、すべての幾何学オブジェクトが円であるわけではありません。したがって、親タイプを必要とするパラメーターにサブクラスのインスタンスをいつでも渡すことができます。参照ケースは次のとおりです。
public class PolymorphismDemo{ /** Main method */ public static void main(String[] args){ displayObject(new Circle(1,"red",false)); displayObject(new Rectangle(1,1,"black",true)); } public static void displayObject(GeometriicObject object){ System.out.println("Created on "+ object.getDateCreated()+".Color is"+object.getColor()); } }
Created on Mon Mar 09 19:25:20 EDT 2011.Color は red
Created on Mon Mar 09 19:25:20 EDT 2011.色は黒です
メソッド displayObject には、GeometricObject 型のパラメータがあります。 displayObject は、GeometricObject のインスタンスを渡すことによって呼び出すことができます。サブクラスのオブジェクトは、親クラスのオブジェクトが使用される場所であればどこでも使用できます。これは一般にポリモーフィズムと呼ばれます。 簡単に言えば、ポリモーフィズムとは、親型の変数がサブタイプ のオブジェクトを参照できることを意味します。
2. ポリモーフィズムの特徴 ポリモーフィズムの前提: 継承 (つまり、子と親のクラス関係が存在する必要があります) ポリモーフィックな親クラス参照変数を使用してメソッドを呼び出す場合、これは、サブクラスによってオーバーライドされたメソッドと呼ばれます。定義形式:親クラス型変数名 = new サブクラス型(); # #3.instanceof演算子 InstanceofはJavaのキーワードです。 Java キーワードの各文字は小文字
です。型変換をよりよく理解するために、これらは動物、シロクマ、パンダの間の関係に似ていると考えることができます。動物クラス Animal はシロクマ クラス Polar bear の親クラスであり、パンダクラス パンダクラス。シロクマは動物なので、いつでもシロクマのインスタンスを Animal 変数に安全に割り当てることができます。 このキーワードは、オブジェクトが特定のデータ型に属するかどうかを判断するために使用されます
。戻り値はブール型です。Fu Zz=new Xu(); Fu Zzz=new yiting(); if(f1 instanceof Xu){ System.out.println("Zz是Xu的类型"); } else{ System.out.println("Zzz是yiting的类型"); }
と呼ばれる親クラスの変数にいつでも変換できます。 Upcast
、サブクラスのインスタンスは常にその親クラスのインスタンスであるためです。関数:
繰り返しコードを削減します。オブジェクトをインスタンス化するときに、さまざまなニーズに応じてさまざまなオブジェクトをインスタンス化できますpackage project2; class Animal{ int num=100; void say(){ System.out.println("It's an Animal."); } } class Cat extends Animal{ int num=50; void say(){ System.out.println("It's a Cat."); } void bark(){ System.out.println("喵喵喵!"); } } public class project2{ public static void main(String[] args) { Animal cat=new Cat();//向上转型 System.out.println(cat.num); cat.say(); // cat.bark(); } }
It's a Cat.
アップキャスト時に変換を強制しないでください。親クラス参照によって指定または呼び出されるメソッドは、サブクラスのメソッドです。これは動的バインディングと呼ばれます。上方変換後、親クラス参照はサブクラス独自のメソッドを呼び出すことができなくなります。
2. 下方変換
親クラスのインスタンスをそのサブクラス変数に変換します。明示的な変換を実行してコンパイラに意図を示すには、変換マーカー (サブクラス名) を使用する必要があります。変換を成功させるには、変換されるオブジェクトがサブクラスのインスタンスであることを確認する必要があります。
関数:
アップキャストすると、サブクラス オブジェクトに固有の他のメソッドは失われます。ダウンキャストしてから再度キャストし直すことができます。
package project2; class Animal{ int num=100; void say(){ System.out.println("It's an Animal."); } } class Cat extends Animal{ int num=50; void say(){ System.out.println("It's a Cat."); } void bark(){ System.out.println("喵喵喵!"); } } public class project2{ public static void main(String[] args) { Animal cat=new Cat();//向上转型 Cat cat2=(Cat) cat;//向下转型 System.out.println(cat2.num); cat2.say(); cat2.bark(); } }
実行結果:
50It's a Cat.
Meow Meow Meow!ヒント: メソッドをオーバーライドするには、親クラスと同じシグネチャを持つサブクラスでメソッドを定義する必要があります。
5. メソッドの書き換え
サブクラスは親クラスからメソッドを継承します。場合によっては、サブクラスが親クラスで定義されたメソッドの実装を変更する必要があることがあります。これはメソッドのオーバーライドと呼ばれます。
次の点に注意してください。
オーバーライドされたメソッドは、オーバーライドされたメソッドと同じシグネチャ、および同じまたは互換性のある戻り値の型を持つ必要があります。互換性とは、オーバーライドするメソッドの戻り値の型が、オーバーライドされるメソッドの戻り値の型のサブタイプになる可能性があることを意味します。インスタンス メソッドがアクセス可能な場合にのみオーバーライドできます。サブクラスで定義されたメソッドが親クラスでプライベートである場合、これら 2 つのメソッドにはまったく関係がありません。インスタンス メソッドと同様に、静的メソッドも継承できます。ただし、静的メソッドをオーバーライドすることはできません。親クラスで定義された静的メソッドを子クラスで再定義すると、親クラスで定義された静的メソッドは非表示になります。非表示の静的メソッドは、「親クラス名.静的メソッド名」の構文を使用して呼び出すことができます。継承と上書きを防止する
一个被final修饰的类和方法都不能被继承。被final修饰的数据域是一个常数。
有时候,可能希望防止类被继承。在这种情况下,使用final修饰符表明一个类是最终类,是不能作为父类的。Math类就是一个最终类。String、StringBuilder和StringBuffer类以及所有基本数据类型的包装类也都是最终类。例如,如下类A 就是最终类,不能被继承:
public final class A{ //Data fields,constructors, and methods omitted }
也可以定义一个方法为最终,最终方法不能被它的子类重写。例如如下,不能被重写:
public class Test { //Data fields,constructors, and methods omitted public final void m() { // Do something } }
注:修饰符public、protected、private、static、abstract以及final可以用在类和类的成员上,只有final修饰符还可以用在方法中的局部变量上。方法内的final局部变量就是常量。
六、小结
为了重写一个方法,必须使用与它的父类中的方法一样的签名、一样或者兼容的返回类型来定义子类中的方法。实例方法只有在可访问时才能重写。这样,私有方法是不能重写的,因为它是不能在类本身之外访问的。如果子类中定义的方法在父类中是私有的,那么这两个方法是完全没有关系的噢!静态方法与实例方法一样可以继承。但是,静态方法不能重写,如果父类中定义的静态方法在子类中重新定义,那么父类中定义的方法被隐藏。可以使用表达式obj instanceof AClass 测试一个对象是否是一个类的实例。可以使用final修饰符来表明一个类是最终类,是不能被继承的;也可以表明一个方法是最终的,是不能被重写的。
推荐学习:《java视频教程》
以上がJavaの概念理解ポリモーフィズムのまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。
