public abstract class Demo{
public Demo(){
this.print();
}
public abstract void print();
}
public class NewDemo extends Demo{
public NewDemo (){
this.print();
}
@Override
public void print() {
System.out.println("NewDemo");
}
}
public class Test{
public static void main(String args[]){
NewDemo a =new NewDemo ();
}
}
Java中this关键字不是指向当前对象。为啥在Demo构造器中能调用子类的print()方法?
抽象类的中的this指向谁?
Oui.
Cependant, vous devez instancier pour obtenir l'objet. Et vous ne pouvez pas instancier une classe abstraite, uniquement ses sous-classes non abstraites. Par exemple, dans votre code :
A ce moment, this pointe vers l'objet a.
This dans la classe Demo fait référence à la référence de l'objet obtenu en l'instanciant.
Il est recommandé que le sujet comprenne d'abord les concepts de base de Java.
Est-ce que cela ne pointe pas vers l'objet lorsqu'il est instancié ? De plus, NewDemo n'est-il pas appelé dans votre Test ? La démo est une classe abstraite qui ne fournit pas d'appels, n'est-ce pas ?
this
fait référence à l'objet actuel. Il ne fait aucun doute que leDemo
dans la classethis
est en fait un objet instance de继承Demo的普通类
, car les classes abstraites ne peuvent pas être instanciées, et ce继承Demo的普通类
doit être implémenté la méthodeprint
, vous pouvez donc appeler la méthodeprint
. Le sujet peut en apprendre davantage sur les notions de polymorphisme et d'héritage, et les savourer avec attention.Vous pouvez retirer le bytecode pour voir lesquels sont dynamiques et lesquels sont statiques.
Cela représente l'objet actuel. Si vous n'aimez pas ça, vous pouvez le supprimer