이 기사에서는 Java의 동적 메소드 스케줄링에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
동적 메소드 스케줄링 :
1. 참조 변수의 비 정적 메소드에 액세스하고 런타임에 실제 참조 객체의 메소드를 바인딩합니다.
2. 런타임에 선언 된 클래스 메소드에 바인딩되는 참조 변수의 정적 메소드에 액세스하십시오.
3. 참조 변수의 멤버 변수 (정적 변수 및 인스턴스 변수 포함)에 액세스하고 런타임에 선언 된 클래스의 멤버 변수를 바인딩하십시오.
포인트 3 : 특별한주의를 기울여, 전에는 눈치 채지 못했습니다.
1. 비 정적 방법 :
공개 클래스 사람 {공개 문자열 이름; public void getInfo () {System.out.println ( "Parent Class"); }} public class 학생 확장 사람 {public void getInfo () {// method override super.getInfo (); // 상위 클래스 메소드 시스템을 호출합니다. 사람 t = 새로운 사람 (); s = t; // S의 객체 유형은 부모 클래스, 즉 Person Class S.getInfo ();}}입니다.실행 결과는 다음과 같습니다
2. 정적 방법 :
공개 클래스 사람 {공개 문자열 이름; public static void getInfo () {System.out.println ( "Parent Class"); }} public class student extends person {publics static void getInfo () {// method override system.out.out.println ( "subclass");} public static void main (String [] args) {person s = new Student (); s.getInfo (); // person.getInfo ();}}에 해당합니다.실행 결과는 다음과 같습니다
3. 멤버 변수
공개 클래스 에슨 {public String name = "아버지"; public void getInfo () {System.out.println ( "Parent Class"); }} public class 학생 확장 사람 {public string name = "son"; public void getInfo () {// method override super.getInfo (); // 상위 클래스 메소드 시스템을 호출합니다.실행 결과 : Fanther
멤버 변수를 정적 유형으로 변경하는 것도 마찬가지입니다.
또한 다음 두 변수의 경우
학생 = 신입생 (); person t = new Student ();
그러나 실제로 둘 사이에는 차이가 있습니다. 서브 클래스 학생이 자체 개인화 된 방법 (부모 클래스가 아님)이있는 경우 방법이 있습니다.
공개 goschool () {}그런 다음 S만이 Goschool 방법을 호출 할 수 있습니다
t를 호출 할 수 없습니다
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.