ホームページ > Java > &#&チュートリアル > Java におけるポリモーフィズムの補足

Java におけるポリモーフィズムの補足

无忌哥哥
リリース: 2018-07-23 10:39:33
オリジナル
1336 人が閲覧しました

Java 参照型には 2 つの型があります。1 つはコンパイル時型、もう 1 つは実行時型です。コンパイル時の型は変数の宣言時に使用された型によって決まり、実行時の型は変数に実際に割り当てられたオブジェクトによって決まります。コンパイル時の型と実行時の型が一致しない場合、いわゆるポリモーフィズムが発生する可能性があります。

public class BaseClass {

	public int book = 6;
	public void base() {
		System.out.println("父类中的普通方法");
	}
	public void text() {
		System.out.println("父类中被覆盖的方法");
	}
}
ログイン後にコピー
public class subClass extends BaseClass{
	public String book ="java";
	public void text() {
		System.out.println("子类中覆盖父类的方法");
	}
	public void sub() {
		System.out.println("子类中的普通方法");
	}
	public static void main(String[] args) {
		//下面编译时类型和运行时类型完全一样,所以不存在多态
		BaseClass bc = new BaseClass();
		System.out.println(bc.book);
		//下面两次调用的是BaseClass的方法
		bc.text();
		bc.base();
		subClass sc = new subClass();
		System.out.println(sc.book);
		//下面调用的是subClass类的方法
		sc.sub();
		sc.text();
		//下面编译时类型与运行时类型是不一样的,就是所谓的多态
		BaseClass bs = new subClass();
		System.out.println(bs.book);
		bs.text();
		bs.base();
		//bs.sub();
		//bs是父类的类型,他访问的是父类的shi'li'bian'liang
	}
	
}
ログイン後にコピー

上記のプログラムの main() メソッドで 3 つの変数が作成されます。最初の 2 つの参照変数はコンパイル時型と実行時型が同じなので、それらのメンバー変数とメンバー メソッドを呼び出すのが通常です。ただし、2 番目の 3 つの変数のコンパイル時の型は、この参照変数のテキスト メソッドが呼び出されるとき、親クラスで定義され、実際に実行されるメソッドでオーバーライドされます。親クラスのメソッドでオーバーライドされます。

Java では、型変換を行わずにサブクラスのオブジェクトを親クラスの参照変数に直接代入することができます。この変換はシステムによって自動的に行われます。

変数を参照するメソッドが実行時に呼び出される場合、そのメソッドの動作は、親クラスの動作特性ではなく、常にサブクラスの動作特性を示します。これは、呼び出し時に同じ型の変数がレンダリングされる可能性があります。親クラスの動作特性ではなく、異なる動作特性をポリモーフィズムと呼びます。

メソッドとは異なり、オブジェクトのインスタンス変数には多態性がありません。

结果:
6
父类中被覆盖的方法
父类中的普通方法
java
子类中的普通方法
子类中覆盖父类的方法
6
子类中覆盖父类的方法
父类中的普通方法
ログイン後にコピー

  1. 参照変数は、コンパイル段階ではそのコンパイル時型が持つメソッドのみを呼び出すことができますが、実行時にはその実行時型が持つメソッドを実行します。 code では、参照変数は、その変数が宣言されているクラス内のメソッドのみを呼び出すことができます。

  2. 型変数を参照して含まれるインスタンス変数にアクセスする場合、システムは常に、定義されたインスタンス変数ではなく、変数が定義されているコンパイル時の型によって定義されたインスタンス変数にアクセスしようとします。実行時にそれによって。

以上がJava におけるポリモーフィズムの補足の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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