JAVASE----マルチステート

2111 ワード

あまり言わないで、直接コードをつけてください.
Teacher.java
 
package jz.file.polymorphism;

public class Teacher {
	public void getHomework(){
		System.out.println("Teacher.getHomework()~~");
	}
}

 CnTeacher.java
 
package jz.file.polymorphism;

public class CnTeacher extends Teacher{
	/**
	 *  
	 */
	@Override
	public void getHomework() {
		System.out.println("CnTeacher.getHomework()~~");
	}
	/**
	 *  
	 */
	public void readChinese(){
		System.out.println("hello chinese");
	}
}

次に始めましょう

package jz.file.polymorphism;

public class Polymorphism {
	public static void main(String args[]) {
		Teacher t1 = new Teacher();
		t1.getHomework();
		Teacher t2 = new CnTeacher();
		t2.getHomework();
		// /**1.*/t2.readChinese();
		// /**2.*/((CnTeacher)t2).readChinese();
		CnTeacher t3 = new CnTeacher();
		t3.getHomework();
		t3.readChinese();
		// /**3.*/((Teacher)t3).getHomework();
		// /**4.*/((Teacher)t3).readChinese();
	}
}

結果
Teacher.getHomework()~~
CnTeacher.getHomework()~~
hello chinese
hello chinese
開く/**1.*/のコメントを間違って報告し、
このときのt 2オブジェクトのタイプはTeacherであるため、TeacherタイプにはreadChinese()という方法はない.
開く/**2.*/のコメントで、結果はCnTeacherと表示されます.getHomework()~~
ここで動的バインドの問題があります.
まずgetHomework()というメソッドについて、「new CnTeacher()」のときに、まず親の構築メソッド「new Teacher()」を呼び出し、これにより、コードセグメントに2つのgetHomework()のメソッドの空間が割り当てる.スタック空間には、それぞれTeacherとCnTeacherの2つの例がある.
これで問題が来た.では、getHomework()というメソッドを呼び出すとき、システムはどのメソッドを呼び出すかをどのように判断しますか?
ここではそのダイナミックバインドスミダについて説明します.
動的バインドとは、プログラムの実行時に動的にバインドする方法のことである.
先ほど挙げた例のように、プログラムの実行中にCnTeacherとTeacherのオブジェクトが作成されると、メソッドをバインドするときに、作成されたオブジェクトに基づいてメソッドが呼び出されます.
言い換えれば、newの誰かは、誰かの方法で.
開く/**3.*/のコメント、結果は2と同じで、同じように向上している場合
開く/**4.*/のコメント、結果が間違っています.
転換したいなら、新しい方法は見られないだろう.