JAVASE----マルチステート
2111 ワード
あまり言わないで、直接コードをつけてください.
Teacher.java
CnTeacher.java
次に始めましょう
結果
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.*/のコメント、結果が間違っています.
転換したいなら、新しい方法は見られないだろう.
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.*/のコメント、結果が間違っています.
転換したいなら、新しい方法は見られないだろう.