通过访问提供商运营商使用超级的情况

时间:2015-08-28 16:06:36

标签: java this super

是否可以以这种方式在java中一起使用thissuper

this.super.a;

...其中a是任何数据成员。尝试上述代码段会出现unexpected token错误。

使用点运算符是否还有其他可能的方法来实现thissuper

4 个答案:

答案 0 :(得分:1)

如果a被声明为受保护的成员字段,您可以说:

this.a

或者如果你定义了一个getter方法:

this.getA();

答案 1 :(得分:0)

supersuper结合使用是没有办法的。当您使用this时,您已经在super.a。没有实际的理由这样做。

您可以使用if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")){ activityViewController.popoverPresentationController.sourceView = self.view; }

答案 2 :(得分:0)

在一个班级中,如果a是父母的受保护或公共成员,则简单地为super.a。

如果要在构造函数/方法中区分类成员a和赋值期间的参数a,则使用

this.a

答案 3 :(得分:0)

使用this

首先,让我们看一下this的用法。 我们不首先讨论访问修饰符(public / protected / private)。

class Cat
{
    String furColor;

    public Cat(){
        this("white");    //Using "this" to invoke its own constructor
    }
    public Cat(String furColor){
        this.furColor = furColor;    //Using "this" to reference its own class member
    }
}

this是对当前对象的引用。您可以使用this来引用当前对象中的任何成员。如果您没有将课程扩展到其他课程,则不必担心super关键字。 [所有类隐式扩展到类对象,但这不是问题]

使用super

现在,让我们来看看super

class Animal
{
    String noise;   
}

class Cat extends Animal
{
    String furColor;

    public Cat(){
        this("white");               //Using "this" to invoke its own constructor
    }
    public Cat(String furColor){
        this.furColor = furColor;    //Using "this" to reference its own class member
        noise = "meow!";             //Set the noise for Cat
    }
    public void makeNoise(){
        System.out.println(noise);             //meow!
        System.out.println(this.noise);        //meow!
        System.out.println(super.noise);       //meow!
        System.out.println(this.super.noise);  //Error!
    }
}

我们可以在子类的构造函数中调用super来调用超类的构造函数。 (因为你可能已经知道了,这里没有详细说明。)

  1. System.out.println(noise);有效,因为noise是从Animal类继承的。只要它不是超类中的private,它就会被子类继承。

  2. System.out.println(this.noise);有效,因为this.用于引用其自己类中的任何成员。写this.noise与撰写noise相同。

  3. System.out.println(super.noise);有效,因为noise实际上来自超类 - Animal。由于它已经继承到Cat类,因此编写super.noise与编写this.noise相同。

  4. System.out.println(this.super.noise);会在编译过程中出错。语法错误。从逻辑上讲,如果你写this.super,你的意图可能会试图引用你的超类的成员。但由于所有非私有成员都将被继承,因此无需编写this.super.xxx。只需使用this.xxx即可。

  5. 除非成员在超类中是私有的,否则您可以this.getXXX()提供超类具有访问者方法。