java-ee - Java this关键字疑问
PHPz
PHPz 2017-04-18 10:32:07
0
5
469
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指向谁?

PHPz
PHPz

学习是最好的投资!

répondre à tous(5)
Peter_Zhu

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.

Ty80

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 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.

Ty80

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal