J'ai appris que nous ne pouvons pas instancier une classe abstraite. Mais aujourd'hui, j'ai testé quelques codes et je me sens confus à ce sujet.créer un objet d'une classe abstraite! = Instancier la classe abstraite?
package MainPackage;
abstract class abstractClass {
abstract abstractClass a_function();
}
public class Src {
abstractClass m;
public abstractClass abstractClassTest() {
return m.a_function();
}
public static void main(String args[]) {
System.out.println("Hello world!");
}
}
Ici je crée une classe abstraite AbstractClass et retour dans la fonction abstractClassTest(). Et il est compilé avec succès sans erreurs! IMO avant de retourner quelque chose, l'ordinateur devrait créer un objet de ce type. Et ici, il devrait créer un objet de abstractClass avant retourner m.function(), que je ne comprends pas. Je pense que nous ne pouvons pas instancier une classe abstraite signifie que nous ne pouvons pas créer un objet d'une classe abstraite ou nous cant nouvelle classe (par exemple. abstractClass m = new abstractClass() is illegal
). Mais à partir des codes ci-dessus, il semble que nous pouvons créer un objet d'une classe abstraite. comment peut-il réaliser? Pour le code abstractClass m
, que fait l'ordinateur quand il voit le code? Nous ne pouvons pas dire que java a instancié la classe abstraite m
pour le code abstractClass m
? et si java instancie la classe abstractClass
, comment peut-il retourner l'objet de abstractClass
dans le code abstract abstractClass a_function();
?
Vous n'êtes pas *** instancier *** une classe abstraite, en utilisant simplement sa référence. – Bhushan
Notez que votre code * n'instancie aucun objet abstractclass. Si vous deviez créer une sous-classe de abstractclass, vous pourriez l'instancier (abstractClass m = new childClass (...)) puis m.a_function serait valide. –
Comme vous le faites remarquer, vous ne pouvez pas "nouveau" une classe abstraite. Votre code n'a pas de "nouveau" n'importe où - alors où serait le problème? – yshavit