Maison > Questions et réponses > le corps du texte
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指向谁?
天蓬老师2017-04-18 10:34:07
Le mot clé this en Java ne pointe pas vers l'objet courant ?
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 :
NewDemo a =new NewDemo ();
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.
PHP中文网2017-04-18 10:34:07
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 ?
怪我咯2017-04-18 10:34:07
this
fait référence à l'objet actuel. Il ne fait aucun doute que le Demo
dans la classe this
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éthode print
, vous pouvez donc appeler la méthode print
. Le sujet peut en apprendre davantage sur les notions de polymorphisme et d'héritage, et les savourer avec attention.
PHP中文网2017-04-18 10:34:07
Vous pouvez retirer le bytecode pour voir lesquels sont dynamiques et lesquels sont statiques.
黄舟2017-04-18 10:34:07
Cela représente l'objet actuel. Si vous n'aimez pas ça, vous pouvez le supprimer