public void hello(){
System.out.println(“Je viens deStudentDeHello”);
}
}
class Person {
public void hello(){
System.out.println(“Je viens dePersonDeHello”);
}
}
Pour les trois étapes du code ci - dessus,Je vais parler de ma compréhension:
Pour la première étape Accès Class Exemple En fait, choisissez l'une des trois méthodes,Il n'y a pas tant à se disputer
Pour la deuxième étape L'apprentissage arrive Le premier argument est le nom de la méthode,Directement à l'endroit où vous allez appeler Nom:xxxMéthode Les paramètres suivants correspondent au type et au nombre de paramètres à passer par la méthode que vous appelez,C'est réglé. Surcharge de la méthode La question de
Appel à une méthode statique,Il est important de noter que Étape 3,invokeLe premier paramètre de null,Parce que La méthode statique n'appartient à aucune instance,Alors...,Aucune instance n'est requise
Pour Polymorphisme de la méthode Questions Ça correspond aussi à Polymorphisme:L'exécution de cette méthode dépend de l'objet instantané au moment de l'exécution de votre code,Indépendamment du type de variable de référence
En bas,Nous vous donnons chacun un exemple à titre de référence:
Appel pour surcharge de méthode
=========
package test;
import com.sun.prism.impl.Disposer;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
public class changeData {
public static void main(String[] args) {
try {
//Première étape,
《Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Notes d'apprentissage pour le développement de l'arrière - plan+La dernière vidéo d'architecture+Document d'information sur le code source du projet en direct》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 Partage open source du contenu complet
AccèsClassExemple ,L'une des trois méthodes
// Student stu = new Student();
// Class stuClass = (Class) stu.getClass();
Class stuClass = Student.class;
//Deuxième étape,Méthode d'obtention ,La méthode à invoquer avec vous Type de paramètre、Nombre de paramètres correspondant à
Method m = stuClass.getMethod(“hello”,String.class);
//Troisième étape,Méthode d'appel
m.invoke(new Student(),“Celui avec un paramètre”);
} catch (Exception e) {
System.out.println(e);
}
}
}
class Student extends Person{
public void hello(){
System.out.println(“Je viens deStudentDeHello”);
}
public void hello(String tag){
System.out.println(“Je viens deStudentDeHello ->” + tag);
}
}
class Person {
public void hello(){
System.out.println(“Je viens dePersonDeHello”);
}
}
Appel à une méthode statique
=========
package test;
import com.sun.prism.impl.Disposer;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
public class changeData {
public static void main(String[] args) {
try {
//Première étape,AccèsClassExemple ,L'une des trois méthodes
// Student stu = new Student();
// Class stuClass = (Class) stu.getClass();
Class stuClass = Student.class;
//Deuxième étape,Méthode d'obtention
Method m = stuClass.getMethod(“hello”);
//Troisième étape,Méthode d'appel , Parce que c'est une méthode statique Il n'appartient à aucune instance Donc votre premier paramètre passe null Ça suffit.
m.invoke(null);
} catch (Exception e) {
System.out.println(e);
}
}
}
class Student extends Person{
public static void hello(){
System.out.println(“Je viens deStudentDeHello”);
}
}
class Person {
public static void hello(){
System.out.println(“Je viens dePersonDeHello”);
}
}
Pour Par private Méthode de modification
==================
package test;
import com.sun.prism.impl.Disposer;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
public class changeData {
public static void main(String[] args) {
try {
//Première étape,AccèsClassExemple ,L'une des trois méthodes
// Student stu = new Student();
// Class stuClass = (Class) stu.getClass();
Class stuClass = Student.class;
//Deuxième étape,Méthode d'obtention
Method m = stuClass.getDeclaredMethod(“hello”);
//Résoudre les erreurs signalées:java.lang.IllegalAccessException: Class test.changeData can not access a member of class test.Student with modifiers “private”
m.setAccessible(true);
//Troisième étape,Méthode d'appel
m.invoke(new Student());
} catch (Exception e) {
System.out.println(e);
}
}
}
class Student extends Person{
private void hello(){
System.out.println(“Je viens deStudentDeHello”);
}
}
class Person {
private static void hello(){
System.out.println(“Je viens dePersonDeHello”);
}
}
Problème d'appel pour le polymorphisme de la méthode
===========
package test;
import com.sun.prism.impl.Disposer;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
public class changeData {
public static void main(String[] args) {
try {
//Première étape,AccèsClassExemple ,L'une des trois méthodes
Person stu = new Student();
// Class stuClass = (Class) stu.getClass();
Class stuClass = Student.class;
//Deuxième étape,Méthode d'obtention
Method m = stuClass.getDeclaredMethod(“hello”);